有人可以告诉我在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语句中移动,但我看不到终端上打印的任何输出.总之,我想知道即使在段错误之后是否可以使用记录/重放功能来执行执行历史记录?
我以为你必须手动指定
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无限制)将使这成为"虚拟"限制
| 归档时间: |
|
| 查看次数: |
1728 次 |
| 最近记录: |