我使用的最上方看到使用映射線程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