2011-09-22 71 views
22

我試圖用一個多線程的項目(使用了libevent)7.3.1 GDB的反向調試功能,但我得到了以下錯誤:如何在多線程程序上啓用反向調試?

(gdb) reverse-step 
Target multi-thread does not support this command. 

this question,我想也許這是一個問題加載libthread_db所,但是,當我運行該程序,GDB說:

Starting program: /home/robb/slug/slug 
[Thread debugging using libthread_db enabled] 
Using host libthread_db library "/lib/libthread_db.so.1". 

我怎樣才能在一個多線程的項目能夠使用gdb 7.3.1逆向調試?可能嗎?

+0

存在一個[鏈接](http://stackoverflow.com/questions/6625486/reverse-step-multithread-error)在這裏過類似的問題。 – Martin

+0

是的,我知道,我自己與這個問題有關。 – rps

回答

22

您需要激活指令記錄目標,從那裏你想要去的向前和向後點執行命令

record 

(記住,記錄將顯著尤其是減慢執行,你有幾個線程)

我剛剛檢查了它的正常工作!

(gdb) info threads 
    Id Target Id   Frame 
    2 Thread 0x7ffff7860700 (LWP 5503) "a.out" hello (arg=0x601030) at test2.c:16 
* 1 Thread 0x7ffff7fca700 (LWP 5502) "a.out" main (argc=2, argv=0x7fffffffe2e8) at test2.c:47 

...

(gdb) next 
49   p[i].id=i; 
(gdb) reverse-next 
47  for (i=0; i<n; i++) 

...

17  printf("Hello from node %d\n", p->id); 
(gdb) next 
Hello from node 1 
18  return (NULL); 
(gdb) reverse-next 
17  printf("Hello from node %d\n", p->id); 
+0

當我做'記錄'時,我得到一個錯誤:'過程記錄目標不能在非停止模式下調試得更差(不停止)。' –

+4

嘗試'設置不停止關閉'和/或'設置目標 - 異步在GDB的最新版本中,這些選項默認爲true – Kevin