2011-10-03 128 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