Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 如何在多线程程序上启用反向调试?_Multithreading_Gdb_Reverse Debugging - Fatal编程技术网

Multithreading 如何在多线程程序上启用反向调试?

Multithreading 如何在多线程程序上启用反向调试?,multithreading,gdb,reverse-debugging,Multithreading,Gdb,Reverse Debugging,我试图在多线程项目上使用gdb 7.3.1的反向调试功能(使用libevent),但出现以下错误: (gdb) reverse-step Target multi-thread does not support this command. 从开始,我认为加载libthread_db可能是个问题,但当我运行程序时,gdb说: Starting program: /home/robb/slug/slug [Thread debugging using libthread_db enabled]

我试图在多线程项目上使用gdb 7.3.1的反向调试功能(使用libevent),但出现以下错误:

(gdb) reverse-step
Target multi-thread does not support this command.
从开始,我认为加载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的反向调试?有可能吗?

要做到这一点,您需要通过执行命令来激活指令记录目标

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的最新版本中,这些选项在默认情况下可能为true,
record
功能不正确支持多线程。请参阅。接受的答案不适用于GDB 8.0。@Kevin提出的解决方案也不起作用。
(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);