CLion не подхватывает переменные окружения, заданные в bashrc

Длинная история (это X)

Мне нужно запустить 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.


TLDR / Проблема (Это Y)

Теперь, если запустить 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?

  • Проблема XY
  • Я использую Ubuntu 16.04
3
задан 3 December 2019 в 17:54

2 ответа

Я вернулся, чтобы принять комментарий @steeldriver в качестве ответа.

Изменение /etc/sysctl.d/10-ptrace.conf , как в ссылке в его комментарии, действительно решает проблему косвенно .

То есть, изменив этот файл (изменив его с 1 на 0 ), я теперь могу запускать GDB с подключением к процессу в CLion без необходимости запускать CLion от имени пользователя root. И, как обычно, запуск CLion из терминала принимает переменные среды.

0
ответ дан 9 January 2020 в 15:28

Источник ваших переменных в .profile, а не .bashrc.

0
ответ дан 21 November 2020 в 20:44

Другие вопросы по тегам:

Похожие вопросы: