2011-10-03 72 views
0

我使用的最上方看到使用映射线程ID入库

top -H -p `pgrep app.out` 

线程明智的CPU使用率这正显示出一些PID为每个线程像

4015 
4016 

我已经连接了gdb来该应用程序使用gdb attach命令。 现在我想切换到顶部o/p内部显示的线程4015。

我该怎么做?

如果我防火线4015它显示没有线程。因为我需要在gdb中提供线程ID。

那么我怎样才能映射顶级线程ID到GDB线程ID?

回答

4

你应该能够匹配与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至少工作,不知道正式发布!

+0

我需要手动映射吗?或者它有一个自动功能? –

+1

@Vivek:看到编辑! – Kevin

1

做一个

ps xjf 

这会给你与他们的PID和父PID所有进程的树。

+0

绝对是一个有用的命令。我更进了一步,做了'ps axjf',并把它吐出一切。但'ps xjf'肯定更加专注。 – Pred