我正在尝试在多线程项目上使用gdb 7.3.1的反向调试功能(使用libevent),但是我收到以下错误:
(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 :(得分:30)
为此,您需要通过执行命令
来激活指令记录目标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);