升级后 gdb 不会附加到进程

And*_*edd 72 sudo debug debugging 11.04

我刚刚从 10.04 升级到 11.04,gdb 不允许我再附加到进程我收到错误

附加到进程 10144 无法附加到进程。如果您的 uid 与目标进程的 uid 匹配,请检查 /proc/sys/kernel/yama/ptrace_scope 的设置,或以 root 用户身份重试。有关更多详细信息,请参阅 /etc/sysctl.d/10-ptrace.conf ptrace:不允许操作。

我如何解决这个问题,以便我可以在没有 sudo 的情况下再次调试?

ale*_*ray 115

在 Maverick Meerkat (10.10) 中,Ubuntu 引入了一个补丁来禁止非 root 用户追踪非子进程 - 即。只有作为另一个进程的父进程的进程才能为普通用户 ptrace 它 - 而 root 仍然可以 ptrace 每个进程。因此,为什么您仍然可以使用 gdb 通过 sudo 进行附加。

您可以通过执行以下操作暂时禁用此限制(并恢复到允许您的用户 ptrace (gdb) 任何其他进程的旧行为):

echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
Run Code Online (Sandbox Code Playgroud)

要永久允许它编辑/etc/sysctl.d/10-ptrace.conf和更改该行:

kernel.yama.ptrace_scope = 1
Run Code Online (Sandbox Code Playgroud)

阅读:

kernel.yama.ptrace_scope = 0
Run Code Online (Sandbox Code Playgroud)

有关为何进行此更改的一些背景信息,请参阅Ubuntu wiki

  • 如果您对 /etc/sysctl.d 中的文件进行了一些编辑,那么您可以使用“sudo service procps restart”自动应用它们 (8认同)
  • 谢谢。我将临时文件添加到用户 bin 文件中的命令中,以便我可以打开和关闭它,效果很好。 (4认同)