【问题标题】:gdb cannot attach to processgdb 无法附加到进程
【发布时间】:2017-12-23 14:10:37
【问题描述】:

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

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

感谢提示。

【问题讨论】:

    标签: linux docker gdb ptrace


    【解决方案1】:

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

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

    在那之前,只要sudo sysctl -w kernel.yama.ptrace_scope=0

    【讨论】:

    • 我试过那个命令:sysctl -w kernel.yama.ptrace_scope=0 sysctl: setting key "kernel.yama.ptrace_scope": 只读文件系统
    • @Ted 您找到解决只读文件系统问题的方法了吗?
    【解决方案2】:

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

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

    【讨论】:

    • 环境在docker中。我在 docker 之外找不到进程。
    • 进程的外部可能有不同的 PID。想一想,它还可以帮助您解除对主机的 YAMA ptrace 限制(如果完全启用的话)。
    • 我在 MacBook 上使用 Docker。是否应该在 Dockerfile 中添加 --cap-add 标志?
    • 不,这是docker run的参数。
    • 其实是--cap-add=SYS_PTRACE
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-16
      • 2015-09-21
      • 1970-01-01
      • 1970-01-01
      • 2014-02-23
      • 1970-01-01
      • 2019-07-14
      相关资源
      最近更新 更多