我使用的最上方看到使用映射线程ID入库
top -H -p `pgrep app.out`
线程明智的CPU使用率这正显示出一些PID为每个线程像
4015
4016
我已经连接了gdb来该应用程序使用gdb attach命令。 现在我想切换到顶部o/p内部显示的线程4015。
我该怎么做?
如果我防火线4015它显示没有线程。因为我需要在gdb中提供线程ID。
那么我怎样才能映射顶级线程ID到GDB线程ID?
我使用的最上方看到使用映射线程ID入库
top -H -p `pgrep app.out`
线程明智的CPU使用率这正显示出一些PID为每个线程像
4015
4016
我已经连接了gdb来该应用程序使用gdb attach命令。 现在我想切换到顶部o/p内部显示的线程4015。
我该怎么做?
如果我防火线4015它显示没有线程。因为我需要在gdb中提供线程ID。
那么我怎样才能映射顶级线程ID到GDB线程ID?
你应该能够匹配与top
信息显示在GDB的LWP
:
根据我的快速测试与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()
(在trunk
版本GDB至少工作,不知道正式发布!
我需要手动映射吗?或者它有一个自动功能? –
@Vivek:看到编辑! – Kevin