当 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(使用前将#替换为@)