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