当进程崩溃时,我希望有可能在崩溃但未清理的状态下对它调用gdb(或类似的调试器).经常对核心转储进行后期处理可以提供足够的信息,但有时我想进一步探索运行状态,可能会抑制即时故障并进一步运行.从一开始就在gdb下运行进程并不总是合适的(例如,调用很复杂或者错误是时间敏感的)
我所描述的基本上是通过"AEDebug"注册表项在MS Windows上公开的即时调试工具:在执行某些诊断时保留故障线程.在非开发人员的Windows PC上,这通常设置为崩溃诊断机制(以前称为"Dr Watson"),Ubuntu等效物似乎是"apport".
我确实找到了一个旧的邮件线程(2007),它引用了这个问题"偶尔会弹出",所以它可能存在但是以一种逃避我搜索的方式描述?
(编辑:根据当前"技巧"下面的第一个答案似乎是使用Atom处理器.但我希望一些gdb专家可以回答,如果这是一个基本的限制,或者是否在路线图上增加了对其他处理器的支持?)
反向执行似乎在我的环境中工作:我可以反向继续,查看合理的记录日志,并在其中移动:
(gdb) start
...Temporary breakpoint 5 at 0x8048460: file bang.cpp, line 13.
Starting program: /home/thomasg/temp/./bang
Temporary breakpoint 5, main () at bang.cpp:13
13 f(1000);
(gdb) record
(gdb) continue
Continuing.
Breakpoint 3, f (d=900) at bang.cpp:5
5 if(d) {
(gdb) info record
Active record target: record-full
Record mode:
Lowest recorded instruction number is 1.
Highest recorded instruction number is 1005.
Log contains 1005 instructions.
Max logged instructions is 200000.
(gdb) reverse-continue
Continuing.
Breakpoint 3, f (d=901) at bang.cpp:5
5 if(d) …Run Code Online (Sandbox Code Playgroud)