小编Tom*_*low的帖子

是否可以将gdb附加到崩溃的进程(也称为"即时"调试)

当进程崩溃时,我希望有可能在崩溃但未清理的状态下对它调用gdb(或类似的调试器).经常对核心转储进行后期处理可以提供足够的信息,但有时我想进一步探索运行状态,可能会抑制即时故障并进一步运行.从一开始就在gdb下运行进程并不总是合适的(例如,调用很复杂或者错误是时间敏感的)

我所描述的基本上是通过"AEDebug"注册表项在MS Windows上公开的即时调试工具:在执行某些诊断时保留故障线程.在非开发人员的Windows PC上,这通常设置为崩溃诊断机制(以前称为"Dr Watson"),Ubuntu等效物似乎是"apport".

我确实找到了一个旧的邮件线程(2007),它引用了这个问题"偶尔会弹出",所以它可能存在但是以一种逃避我搜索的方式描述?

crash debugging gdb

12
推荐指数
2
解决办法
4403
查看次数

如何在GDB中运行记录指令历史和函数调用历史记录?

(编辑:根据当前"技巧"下面的第一个答案似乎是使用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)

gdb reverse-debugging

9
推荐指数
1
解决办法
3893
查看次数

标签 统计

gdb ×2

crash ×1

debugging ×1

reverse-debugging ×1