2011-09-22 166 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