gdb无法附加到进程

时间:2017-07-18 15:35:57

标签: linux docker gdb ptrace

这是我正在使用的操作系统:

Linux securecluster 4.9.8-moby#1 SMP Wed Feb 8 09:56:43 UTC 2017 x86_64 x86_64 x86_64 GNU / Linux

当尝试以root用户身份将gdb附加到挂起进程时,我得到以下内容:

Attaching to process 9636
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.

我修改了/etc/sysctl.d/10-ptrace.conf,结果是:

kernel.yama.ptrace_scope = 0

然而,我得到了同样的错误。 我尝试更改/ proc / sys / kernel / yama / ptrace_scope:

echo 0 | tee /proc/sys/kernel/yama/ptrace_scope
tee: /proc/sys/kernel/yama/ptrace_scope: Read-only file system

提示表示赞赏。

3 个答案:

答案 0 :(得分:4)

您使用的是容器引擎吗?尝试从容器外部(在主机上)附加到进程;那里可能有不同的PID。

或者,启动具有CAP_SYS_PTRACE功能的容器(例如,使用--cap-add sys_ptrace)。当然,如果你无法重现挂起,那么就不能使用这种方法了。

答案 1 :(得分:3)

  

我修改了/etc/sysctl.d/10-ptrace.conf

这只会在下次重启时生效。

在此之前,只需执行sudo sysctl -w kernel.yama.ptrace_scope=0

答案 2 :(得分:0)

@Ted @escapecharacter 您所指的内核参数取自主机系统,这就是为什么它是只读的,您不能从容器内部编辑实际的配置文件。您可以在容器中覆盖它,只需将 -w 标志放到 #sudo sysctl kernel.yama.ptrace_scope=0 。一个永久性的解决方案是在主机节点上执行此操作,默认情况下所有容器都会继承此操作。