Мне нужно запустить CLion с
sudo
, чтобы я мог прикрепитьgdb
к запущенному процессу из CLion (для отладки). Причина в том, что когда я запускаю CLion безsudo
и пытаюсь присоединиться к процессу (CLion GUI), я получаю:
com.jetbrains.cidr.execution.debugger.backend.gdb.GDBDriver$GDBCommandException: ptrace: Операция не разрешена.
В качестве второй проверки я попробовал запуститьgdb
в терминале вручную безsudo
:
gdb -p 16741
...
Не удалось присоединиться к процессу. Если ваш uid совпадает с uid целевого процесса, проверьте настройки "/proc/sys/kernel/yama/ptrace_scope" или повторите попытку от имени пользователя root. Для получения более подробной информации смотрите "/etc/sysctl.d/10-ptrace.conf"
ptrace: Операция не разрешена.
Однако, если я запускаюgdb
сsudo
:
sudo gdb -p 16714
...
Прикрепление к процессу 16714
Поэтому я думаю, что мне следует запустить CLion от имени root.
Теперь, если запустить sh /opt/clion/bin/clion.sh
из терминала Ubuntu, CLion подхватывает переменные окружения из файла ~/.bashrc
, и моя программа компилируется без ошибок.
Но поскольку без sudo
я не могу подключить gdb
к процессу изнутри CLion
для отладки, поэтому мне нужно запустить clion.sh
сценарий запуска от имени root.
Проблема в том, что при выполнении sudo sh /opt/clion/bin/clion.sh
, CLion похоже, не подхватывает переменные окружения, что приводит к ошибке "CMake не может найти пакет ...", из-за чего моя программа не запускается - что еще хуже.
CMake Error at CMakeLists.txt:64 (message):
find_package(catkin) failed. catkin was neither found in the workspace nor
in the CMAKE_PREFIX_PATH. One reason may be that no ROS setup.sh was
sourced before.
Как мне запустить скрипт запуска CLion с sudo
и сохранить переменные окружения, которые хранятся в ~/.bashrc
?
Я думаю, что CLion не подхватывает следующие переменные. Если быть совсем точным, у меня в файле ~/.bashrc
есть такая строка:
source /opt/ros/kinetic/setup.bash
содержимое которого
#!/usr/bin/env bash
# генерируется из catkin/cmake/templates/setup.bash.in
CATKIN_SHELL=bash
# исходный файл setup.sh из той же директории, что и этот файл
_CATKIN_SETUP_DIR=$(builtin cd "`dirname "${BASH_SOURCE[0]}"`" >
/dev/null && pwd)
. "$_CATKIN_SETUP_DIR/setup.sh"
Возможно, есть способ добавить это непосредственно в сценарий запуска CLion?
Я вернулся, чтобы принять комментарий @steeldriver в качестве ответа.
Изменение /etc/sysctl.d/10-ptrace.conf
, как в ссылке в его комментарии, действительно решает проблему косвенно .
То есть, изменив этот файл (изменив его с 1
на 0
), я теперь могу запускать GDB с подключением к процессу в CLion без необходимости запускать CLion от имени пользователя root. И, как обычно, запуск CLion из терминала принимает переменные среды.
Источник ваших переменных в .profile
, а не .bashrc
.