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

时间:2011-04-01 15:06:00

标签: gdb record

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

由于 拉吉

更新

#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;
}      

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

1 个答案:

答案 0 :(得分:6)

我认为你必须用

手动指定
record save filename

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

<强>更新

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

info record 
  

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

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

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