问题

问题

长话短说(这就是 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.

然而,如果我运行gdbsudo所以

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如下关联他的评论确实解决了这个问题间接

也就是说,通过修改此文件(从 更改为10,我现在可以在 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,将选项更改ExecExec="/path/to/clion-with-env.sh"。这是在启动器中创建 CLion 图标的文件。您可能需要等待几秒钟或注销才能更新设置。

如果要打印一些内容clion-with-env.sh进行调试,可以将Terminal选项更改为true。然后在 CLion 启动之前会显示一个终端。

我首先尝试使用source /home/user/.bashrc,但不知何故它不起作用。

相关内容