长话短说(这就是 X)
我需要开始克莱恩以便
sudo
我可以gdb
从 CLion 连接到正在运行的进程(用于调试目的)。原因是当我运行 CLion 时没有sudo
,并尝试附加到一个进程(CLion GUI),我收到:
com.jetbrains.cidr.execution.debugger.backend.gdb.GDBDriver$GDBCommandException: ptrace: Operation not permitted.
作为第二次检查,我尝试gdb
在终端中手动运行,而无需sudo
:
gdb -p 16741
...
Could not attach to process. If your uid matches the uid of the target process, check the setting of "/proc/sys/kernel/yama/ptrace_scope", or try again as the root user. For more details, see "/etc/sysctl.d/10-ptrace.conf"
ptrace: Operation not permitted.
然而,如果我运行gdb
:sudo
所以
sudo gdb -p 16714
...
Attaching to process 16714
我认为我应该以 root 身份运行 CLion。
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 # generated from catkin/cmake/templates/setup.bash.in CATKIN_SHELL=bash # source setup.sh from same directory as this file _CATKIN_SETUP_DIR=$(builtin cd "`dirname "${BASH_SOURCE[0]}"`" > /dev/null && pwd) . "$_CATKIN_SETUP_DIR/setup.sh"
也许,有办法将其直接添加到 CLion 的启动脚本中?
- XY问题
- 我正在运行 Ubuntu 16.04
答案1
我回来接受@steeldriver 的评论作为答案。
修改/etc/sysctl.d/10-ptrace.conf
如下关联他的评论确实解决了这个问题间接。
也就是说,通过修改此文件(从 更改为1
)0
,我现在可以在 CLion 中将 GDB 附加到进程,而无需以 root 身份运行 CLion。并且像往常一样,从终端运行 CLion 会获取环境变量。
答案2
.profile
在not中获取变量.bashrc
。
答案3
我使用的是 Ubuntu 22.04,遇到了同样的问题。我的解决方案是创建另一个脚本clion-with-env.sh
来设置所有环境变量
#!/bin/bash
source setup-vars.sh
source setup-vars2.sh
export MYVAR=...
...
sh /foo/bar/clion-*/bin/clion.sh
然后修改应用程序文件,例如/usr/share/applications/jetbrains-clion.desktop
,将选项更改Exec
为Exec="/path/to/clion-with-env.sh"
。这是在启动器中创建 CLion 图标的文件。您可能需要等待几秒钟或注销才能更新设置。
如果要打印一些内容clion-with-env.sh
进行调试,可以将Terminal
选项更改为true
。然后在 CLion 启动之前会显示一个终端。
我首先尝试使用source /home/user/.bashrc
,但不知何故它不起作用。