我有一个服务器应用程序,可以使用INETD为客户端召唤。但是,如果我尝试将INETD启动的服务器流程附加到以下响应:PTRACE:操作不允许。

gdb --annotate=3 /my/app/here <processId>

Current directory is /usr/local/bin/
GNU gdb 6.8
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "i686-pc-linux-gnu"...
Reading symbols from /usr/local/bin/flumed...done.
Using host libthread_db library "/lib/tls/libthread_db.so.1".
Attaching to program: /my/app/here, process <processId>
ptrace: Operation not permitted.
/usr/local/bin/<processId>: No such file or directory.
(gdb) 
有帮助吗?

解决方案 2

显然,用UserID不是根的Inetd时,情况变得时髦。您最终获得了具有怪异权限的过程。例如,即使权限为777,您也无法阅读/proc/self/exe。我怀疑这个问题更相同。即使我是该过程的用户,我也没有权限。将root用于GDB是一项工作。

其他提示

对我的解决方案是:

echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope

进一步,Tgoodhart说了什么 ptrace 用户喜欢 /usr/bin/strace 也将阻止 gdb.

当GDB的多个实例同时运行时,我还看到了这个问题,通常是因为我无法正确关闭GDB。关闭这些泄漏的实例解决了问题。

请运行以下命令来解决您的问题:

sudo chmod +s/usr/bin/gdb

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top