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

时间:2011-07-12 03:54:27

标签: process gdb

当gdb附加进程时,进程的统计信息为“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是否调试?或者我可以知道gdb附加了哪个进程(27833)

pstree -p 27833 --- show gdb(27833)

另一个问题:如何知道一个进程(stat:T)附加了哪个gdb(PID)? 在大多数情况下,我不是正在贬低这个过程的peoson。

3 个答案:

答案 0 :(得分:8)

T输出中的ps代表“是ptrace()d”。因此,某事正在跟踪该过程(26995)。这通常是GDBstrace

是的,如果您知道自己只运行GDB而不是strace,并且如果您看到T状态的单个进程,那么您知道您正在调试过程

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

(gdb) info process
(gdb) info inferior

<强>更新 正如Matthew Slattery正确指出的那样,T只是意味着流程已停止,而不是ptrace()d

因此,更好的解决方案是:

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

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

答案 1 :(得分:5)

/ proc文件系统是Linux的远程设计。许多过程实时信息可以从 / proc / {PID} / 中找到。

  

另一个问题:如何知道一个过程(stat:T)   GDB(PID)?在大多数的siduation中,我不是正在贬低它的peoson   过程

对于这个问题,我们可以检查/ proc / {PID} /状态文件以获得答案。

root     14616  0.0  0.0 36152  908 ?        Ss   Jun28   0:00 /mytest
root     14617  0.5  0.0 106192 7648 ?       Sl   Jun28 112:45 /mytest
tachyon   2683  0.0  0.0 36132 1008 ?        Ss   11:22   0:00 /mytest
tachyon   4276  0.0  0.0 76152 20728 pts/42  S+   11:22   0:00 gdb /mytest
tachyon   2684  0.0  0.0 106136 7140 ?       Tl   11:22   0:00 /mytest

host1-8&gt; cat / proc / 2684 / status

Name:   mytest
State:  T (tracing stop)
SleepAVG:       88%
Tgid:   2684
Pid:    2684
PPid:   2683
TracerPid:      4276
.......

因此我们知道2684是由进程4276调试的。

答案 2 :(得分:0)

您可以从ps axf输出中找到此信息。

 1357 ?        Ss     0:00 /usr/sbin/sshd
 1935 ?        Ss     0:00  \_ sshd: root@pts/0
 1994 pts/0    Ss     0:00      \_ -bash
 2237 pts/0    T      0:00          \_ gdb /bin/ls
 2242 pts/0    T      0:00          |   \_ /bin/ls
 2243 pts/0    R+     0:00          \_ ps axf

这里,进程2242正由gdb进程2237进行调试。