标签: reverse-debugging

反向调试如何工作?

GDB有一个支持反向调试的新版本(参见http://www.gnu.org/software/gdb/news/reversible.html).我想知道它是如何工作的.

为了使反向调试工作,在我看来,您需要存储整个机器状态,包括每个步骤的内存.这会使性能变得非常慢,更不用说使用大量内存了.这些问题是如何解决的?

reverse-debugging

80
推荐指数
5
解决办法
2万
查看次数

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

我正在尝试在多线程项目(使用libevent)上使用gdb 7.3.1的反向调试功能,但是我收到以下错误:

(gdb) reverse-step
Target multi-thread does not support this command.
Run Code Online (Sandbox Code Playgroud)

这个问题,我想也许加载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".
Run Code Online (Sandbox Code Playgroud)

如何在多线程项目中使用gdb 7.3.1启用反向调试?可能吗?

multithreading gdb reverse-debugging

30
推荐指数
1
解决办法
6913
查看次数

如何对程序进行双向或反向调试?

有没有人真正使用过可逆调试器?谷歌出现的唯一产品是UndoDB.它显然仅适用于Linux.

debugging gdb reverse-debugging

15
推荐指数
3
解决办法
3035
查看次数

14
推荐指数
2
解决办法
4526
查看次数

有人试过在gdb中进行反向调试吗?

有没有人尝试在新发布的gdb-7.0中使用新的记录/重放和反向调试功能?我是gdb开发人员/维护人员之一,我非常渴望获得用户反馈!

gdb reverse-debugging

10
推荐指数
1
解决办法
2087
查看次数

如何在GDB中运行记录指令历史和函数调用历史记录?

(编辑:根据当前"技巧"下面的第一个答案似乎是使用Atom处理器.但我希望一些gdb专家可以回答,如果这是一个基本的限制,或者是否在路线图上增加了对其他处理器的支持?)

反向执行似乎在我的环境中工作:我可以反向继续,查看合理的记录日志,并在其中移动:

(gdb) start
...Temporary breakpoint 5 at 0x8048460: file bang.cpp, line 13.
Starting program: /home/thomasg/temp/./bang 

Temporary breakpoint 5, main () at bang.cpp:13
13    f(1000);
(gdb) record 
(gdb) continue 
Continuing.

Breakpoint 3, f (d=900) at bang.cpp:5
5     if(d) {
(gdb) info record 
Active record target: record-full
Record mode:
Lowest recorded instruction number is 1.
Highest recorded instruction number is 1005.
Log contains 1005 instructions.
Max logged instructions is 200000.
(gdb) reverse-continue 
Continuing.

Breakpoint 3, f (d=901) at bang.cpp:5
5     if(d) …
Run Code Online (Sandbox Code Playgroud)

gdb reverse-debugging

9
推荐指数
1
解决办法
3893
查看次数

从VirtualBox VM中的gdb记录中提取执行日志

我正在尝试使用gdb的记录功能来生成为教程示例执行的指令列表

我可以使用gdb记录成功前进和后退,并使用"record save"将执行日志保存到文件中.

我想我想做的是"记录指令 - 历史",它来自docs

从记录的执行日志中反汇编指令

但是当我尝试这个时,我得到错误:

当您的目标是"记录已满"时,您无法做到这一点

尝试将记录目标设置为btrace会返回错误:

Target不支持分支跟踪.

我在VirtualBox VM中运行gdb 7.6,我是否需要本机运行,或者是否有其他魔法我缺少.

gdb virtualbox record reverse-debugging

8
推荐指数
1
解决办法
453
查看次数

使用lldb进行反向调试

我已经阅读了本教程,但我还没有找到任何关于反向调试的内容.lldb是否有像target recordgdb 一样的功能?如果是,我在哪里可以阅读它?

reverse-debugging lldb

7
推荐指数
1
解决办法
2494
查看次数

gdb反向调试失败,"进程记录不支持地址指令0xf0d"

我开始尝试使用gdb 7进行反向调试,按照教程:

http://www.sourceware.org/gdb/wiki/ProcessRecord/Tutorial
Run Code Online (Sandbox Code Playgroud)

我想,太好了!

然后我开始调试一个真正的程序,最后给出一个错误.所以我用gdb运行它,并在我认为错误出现的地方之前放置一个断点.然后我键入"record"以开始记录操作以便将来进行反向调试.但经过一些步骤,我得到了

Process record doesn't support instruction 0xf0d at address 0x2aaaab4c4b4e.
Process record: failed to record execution log.

Program received signal SIGTRAP, Trace/breakpoint trap.
0x00002aaaab4c4b4e in memcpy () from /lib64/libc.so.6
(gdb) n
Single stepping until exit from function memcpy,
which has no line number information.
Process record doesn't support instruction 0xf0d at address 0x2aaaab4c4b4e.
Process record: failed to record execution log.

Program received signal SIGABRT, Aborted.
0x00002aaaab4c4b4e in memcpy () from /lib64/libc.so.6
Run Code Online (Sandbox Code Playgroud)

在我详细介绍之前,我想知道这个功能是否还有错误,或者我是否应该从头开始录制.

发生此"记录"错误的地方,只创建一个对象作为其他对象的副本.

gdb reverse-debugging

6
推荐指数
2
解决办法
2717
查看次数

反向步骤多线程错误

我在gdb(版本7.1)中收到以下消息:

[Thread debugging using libthread_db enabled]

和命令 reverse-step

结果出现以下错误消息:

(gdb) reverse-step
Target multi-thread does not support this command
Run Code Online (Sandbox Code Playgroud)

我正在调试一个串行代码,所以我绝对不需要多线程.我可以以某种方式关闭它,以便我获得最新的反向调试命令吗?此外,如果代码与OpenMPI并行化,则根本不需要多线程调试,对吧?

编辑:这是否设置为可以被排除的编译标志?

debugging multithreading gdb reverse-debugging

6
推荐指数
1
解决办法
3132
查看次数