如何知道gdb附加了哪个进程(stat: T)?

2024-04-16

当 gdb 附加进程时,该进程的 stat 为“T”,例如:

root      6507  0.0  0.0  67896   952 ?        Ss   12:01   0:00 /mytest
root      6508  0.0  0.0 156472  7120 ?        Sl   12:01   0:00 /mytest
root     26994  0.0  0.0  67896   956 ?        Ss   19:59   0:00 /mytest
root     26995  0.0  0.0 156460  7116 ?        Tl   19:59   0:00 /mytest
root     27833  0.0  0.0  97972 24564 pts/2    S+   20:00   0:00 gdb /mytest

由上可知,26995可能正在调试。我怎么知道26995是否是debug?或者我可以知道 gdp(27833) 附加了哪个进程吗

pstree -p 27833 --- 显示 gdb(27833)

另一个问题:如何知道进程(stat:T)是由哪个gdb(PID)附加的?在大多数情况下,我不是调试该过程的人。


The T in ps输出代表“being ptrace()d”。因此该进程 (26995) 正在被跟踪某物。最常见的情况是GDB, or strace.

所以是的,如果你知道你只是在跑步GDB并不是strace,如果您看到单个进程T状态,那么您就知道您正在调试该进程。

你也可以问GDB它正在调试哪个进程:

(gdb) info process
(gdb) info inferior

Update正如马修·斯拉特里(Matthew Slattery)正确指出的那样,T只是意味着进程已停止,而不是正在运行ptrace()d.

所以更好的解决方案是这样做:

 grep '^TracerPid:' /proc/*/status | grep -v ':.0'
 /proc/7657/status:TracerPid:    31069

从上面的输出中,您可以看出进程 7657 正在被进程 31069 跟踪。这回答了“哪个进程正在被调试器”和“哪个调试器正在调试什么”。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何知道gdb附加了哪个进程(stat: T)? 的相关文章

随机推荐