Gdb进程记录/重放执行日志

Raj*_*Raj 4 gdb record

有人可以告诉我在gdb中使用进程记录/重放功能时会在哪里存储执行日志?

谢谢Raj

更新

#include <stdio.h>

int main (int argc, char const *argv[])
{
    printf("Hello World\n");
    printf("How are you?\n");
    char *c = NULL;
    printf("%c\n", *c);
    return 0;
}      
Run Code Online (Sandbox Code Playgroud)

当我取消引用c时,上面的代码出错了.我想用这个例子来弄清楚如何在segfault之后使用reverse-next/reverse-continue返回.我能够反向执行并到达第一个printf语句,在该语句中我在记录执行时设置了一个断点.在此之后,当我在gdb中尝试"next"命令时,我看到光标在printf语句中移动,但我看不到终端上打印的任何输出.总之,我想知道即使在段错误之后是否可以使用记录/重放功能来执行执行历史记录?

seh*_*ehe 6

我以为你必须手动指定

record save filename
Run Code Online (Sandbox Code Playgroud)

默认文件名是gdb_record.process_id,其中process_id是已调试进程的进程ID.这意味着,如果您不指定它,请查看调试器的CWD

更新

关于insn-number-max的额外问题:

info record 
Run Code Online (Sandbox Code Playgroud)

显示有关进程记录状态及其内存中执行日志缓冲区的各种统计信息,包括:

  • 无论是录制模式还是重播模式.
  • 记录的最低指令编号(从当前执行日志开始记录指令开始算起).
  • 记录的最高指令编号.
  • 即将重播的当前指令(如果处于重放模式).
  • 执行日志中包含的指令数.
  • 执行日志中可能包含的最大指令数.

我不确定,但这可能表明整体都存在于记忆中.当然,64位系统和大量交换(以及ulimit无限制)将使这成为"虚拟"限制