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

Ope*_*way 6 gdb reverse-debugging

我开始尝试使用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)

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

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

Cir*_*四事件 5

从 GDB 7.11.1 开始不支持 AVX

也许这与以下提到的问题相同:

因为您的跟踪提到了 memcpy,它在 Ubuntu 16.04 中使用 AVX 指令,但如果没有最小的示例,很难确定。

rr是一个很棒的工作替代方案:https://github.com/mozilla/rr这是一个最小的工作示例:在函数返回的 GDB 中设置断点


Emp*_*ian 0

听起来precord仍然有问题。

请确保您使用的是最新发布的 GDB 7.1,并提交错误。的输出x/i 0x2aaaab4c4b4e可能会有所帮助。GCC 和 libc.so.6 的确切分布和版本也是如此