我试图用gdb附加一个程序,但它返回:
附加到进程29139 无法附加到进程。如果您的uid与目标进程的uid匹配,请检查/proc/sys/scope/yama/ptrace的设置,或者作为根用户再试一次。有关更多细节,请参见/etc/sysctl.d/10-ptrace.conf 不允许操作。
gdb-调试器返回“未能附加到进程,请检查特权,然后再试一次。”
strace返回“附加: ptrace(PTRACE_ATTACH,.):不允许的操作”
我将"kernel.yama.ptrace_scope“1改为0,将/proc/sys/kernel/yama/ptrace_scope
1更改为0,并使用以下方法尝试了set environment LD_PRELOAD=./ptrace.so
:
#include <stdio.h>
int ptrace(int i, int j, int k, int l) {
printf(" ptrace(%i, %i, %i, %i), returning -1\n", i, j, k, l);
return 0;
}
但它仍然返回相同的错误。如何将其附加到调试器?
发布于 2017-10-10 22:16:36
如果您使用的是Docker,您可能需要以下选项:
docker run --cap-add=SYS_PTRACE --security-opt seccomp=unconfined
如果您正在使用Podman,您可能也需要它的--cap-add
选项:
podman run --cap-add=SYS_PTRACE
发布于 2015-08-28 15:28:57
这是由于Linux内核增强所致;您可以通过echo 0 > /proc/sys/kernel/yama/ptrace_scope
或在/etc/sysctl.d/10-ptrace.conf
中修改此行为来禁用此行为。
还请参阅这篇文章发表在Fedora 22。 (有指向文档的链接)和这条关于Ubuntu的评论帖子以及。
发布于 2018-10-06 21:40:34
我想补充的是,我需要--security-opt apparmor=unconfined
以及@睿智提到的选项。这是在Ubuntu18.04( Docker客户端和主机)上。因此,在容器中启用gdb调试的完整调用是:
docker run --cap-add=SYS_PTRACE --security-opt seccomp=unconfined --security-opt apparmor=unconfined
https://stackoverflow.com/questions/19215177
复制相似问题