有人可以告诉我在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语句中移动,但我看不到终端上打印的任何输出。总之,我想知道即使在段错误之后是否可以使用记录/重放功能来执行执行历史记录?
答案 0 :(得分:6)
我认为你必须用
手动指定record save filename
默认文件名为gdb_record.process_id,其中process_id是已调试进程的进程ID。这意味着,如果您不指定它,请查看调试器的CWD
<强>更新强>
关于insn-number-max的额外问题:
info record
显示有关进程记录状态及其内存的各种统计信息 执行日志缓冲区,包括:
- 是处于录制模式还是重播模式。
- 最低记录的指令编号(从当前执行日志开始记录指令开始算起)。
- 最高记录的指令编号。
- 即将重播的当前说明(如果处于重播模式)。
- 执行日志中包含的指令数。
- 执行中可能包含的最大指令数 日志中。
我不确定,但这可能表明整体都存在于记忆中。 当然,64位系统和大量交换(以及ulimit无限制)会使这个成为“虚拟”限制