【发布时间】:2014-04-25 21:19:17
【问题描述】:
当一个进程崩溃时,我希望能够在崩溃但未清理的状态下针对它调用 gdb(或类似的调试器)。通常对核心转储进行事后分析会提供足够的信息,但有时我想进一步探索运行状态,可能会抑制直接故障并进一步运行。从一开始就在 gdb 下运行进程并不总是合适的(例如,调用很复杂或错误对时间非常敏感)
我所描述的基本上是通过“AEDebug”注册表项在 MS Windows 上公开的即时调试工具:在进行某些诊断时让故障线程挂起。在非开发人员 Windows PC 上,这通常设置为崩溃诊断机制(以前称为“Dr Watson”),Ubuntu 等效项似乎是 "apport"。
我确实找到了一个old mail thread (2007),它指的是“不时弹出”这个问题,所以它可能存在,但以一种我无法搜索的方式描述?
【问题讨论】:
-
对于您的应用程序,您始终可以在 SIGSEGV 上添加信号处理程序。
-
@StephaneChazelas - 是的,但不幸的是,我继承了一个测试可执行文件的动物园,这些可执行文件通过一个有点难以理解的 perl 脚本(它喜欢创建符号链接,有时是递归的:-))。总的来说,我认为这将是一个有用的工具,可以添加到我的工具箱中。
-
您可能想看看
valgrind做了什么,因为我相信它可以在某些事件上调用 gdb。 -
@StephaneChazelas 感谢 valgrind 指导;我认为该协会提供了internal gdb server to make it convenient to inspect the traps it raises。所以这不是我正在寻找的具体灵丹妙药,但实际上是一种更好的子弹。