4

inetd を使用してクライアント用に呼び出すことができるサーバー アプリケーションがあります。しかし、inetd で起動されたサーバー プロセスにアタッチしようとすると、次の応答が返されます。

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) 
4

5 に答える 5

8

私にとっての解決策はこれでした:

echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
于 2011-06-07T15:53:13.997 に答える
2

tgoodhart が言ったことに加えて、他のptraceユーザー/usr/bin/straceもブロックしgdbます。

于 2013-03-24T08:49:23.900 に答える
2

どうやら、ユーザー ID が root ではない inetd で事態がおかしくなるようです。奇妙な権限を持つプロセスになってしまいます。たとえば、パーミッションが 777 であっても、/proc/self/exe を読み取ることができません。この問題はもっと似ているのではないかと思います。私はプロセスのユーザー ID ですが、権限がありません。gdb に root を使用することは回避策です。

于 2009-10-24T15:16:55.273 に答える
0

また、gdb の複数のインスタンスが同時に実行されているときにこの問題が発生することも確認しました。これは通常、gdb を正しく閉じられなかったことが原因です。これらのリークされたインスタンスを閉じると、問題が修正されました。

于 2011-07-22T16:22:05.207 に答える
-1

次のコマンドを実行して問題を解決してください。

sudo chmod +s /usr/bin/gdb

于 2013-06-28T09:16:03.753 に答える