我使用top来使用
查看线程明智的cpu使用情况 top -H -p `pgrep app.out`
它显示了每个线程的一些pid,如
4015
4016
我使用gdb attach命令将gdb附加到应用程序。 现在我想切换到显示在顶部o / p内部的线程4015。
我该怎么做?
如果我触发线程4015,它显示没有线程。因为我需要在gdb中提供线程ID。
那么如何将顶级线程id映射到gdb线程id?
答案 0 :(得分:5)
您应该能够将GDB中显示的LWP
与top
信息进行匹配:
根据我在Firefox上的快速测试,您可以在top -H -p
:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6492 kevin 20 0 1242m 386m 31m S 0.3 4.9 0:09.00 firefox
6470 kevin 20 0 1242m 386m 31m S 5.7 4.9 5:04.89 firefox
以及GDB中的info threads
:
22 Thread 0x7fe3d2393700 (LWP 6492) "firefox" pthread_cond_timedwait...
...
* 1 Thread 0x7fe3dd868740 (LWP 6470) "firefox" __GI___poll ()...
编辑:专属于您,这是gdb的全新命令:lwp_to_id <lwp>
:
import gdb
class lwp_to_id (gdb.Command):
def __init__(self):
gdb.Command.__init__(self, "lwp_to_id", gdb.COMMAND_OBSCURE)
def invoke(self, args, from_tty):
lwp = int(args)
for thr in gdb.selected_inferior().threads():
if thr.ptid[1] == lwp:
print "LWP %s maps to thread #%d" % (lwp, thr.num)
return
else:
print "LWP %s doesn't match any threads in the current inferior." % lwp
lwp_to_id()
(至少在GDB的trunk
版本上工作,不确定官方版本!
答案 1 :(得分:1)
做一个
ps xjf
这将为您提供包含其pid和父pid的所有进程的树。