如何让gdb在收到信号时发送外部通知?

时间:2011-01-30 21:21:04

标签: gdb notifications crash-reports

我正在调试 - 在tmux会话中的gdb内的前台模式下运行守护程序应用程序。这个守护进程偶尔会与SIGSEGV崩溃。这次崩溃的结果对于外界来说并不是很明显,因此我可能需要一段时间才能发现该守护进程已经崩溃。当发生崩溃时,我希望立即收到某种通知,即使电子邮件也没问题。我找不到man gdb的帮助。这是如何实现的(如果有的话)?

~ $ gdb --version
GNU gdb (Gentoo 7.2 p1) 7.2

2 个答案:

答案 0 :(得分:0)

便宜又丑陋的东西:

while sleep 30 ; ps auxw | grep progname | grep " t "` && mail -s CRASHED username@host < /etc/hostname ; done

如果您只想邮寄一次;)那么还有更多工作要做。但每30秒发一封电子邮件直到你杀了这个可能只是伎俩。

答案 1 :(得分:0)

看起来我已经解决了这个问题,一段时间后又回到了它。在Make gdb quit automatically on successful termination?的一个答案中提示$ _exitcode,让我走上了道路,一些谷歌搜索出现了gdb hooks

经过一些实验,这就是我现在对这个应用程序的 .gdbinit 所拥有的。好的方面是,我可以区分信号,所以正常的kill命令给我一个正常的完全退出三头怪物(tmux + gdb + app),而任何不寻常的东西都会掉到gdb shell,发出一封电子邮件等我来tmux进行诊断:

set $_exitcode = -999
set height 0
handle SIGTERM nostop print pass
handle SIGPIPE nostop
define hook-stop
    if $_exitcode != -999
        quit
    else
        shell echo | mail -s "NOTICE: app has stopped on unhandled signal" root
    end
end
echo .gdbinit: running app\n
run