我在tmux會話內的gdb內部調試運行守護進程應用程序,前臺模式。這個守護進程偶爾會碰到一個SIGSEGV。這次崩潰的結果並不是立刻對外界顯而易見的,因此我可能需要一段時間才能發現守護進程已經崩潰。我希望在發生崩潰時立即收到某種通知,即使電子郵件也沒問題。我找不到man gdb的幫助。 (如果有的話)是如何實現的?如何讓gdb在接收信號時發送外部通知?
~ $ gdb --version
GNU gdb (Gentoo 7.2 p1) 7.2
我在tmux會話內的gdb內部調試運行守護進程應用程序,前臺模式。這個守護進程偶爾會碰到一個SIGSEGV。這次崩潰的結果並不是立刻對外界顯而易見的,因此我可能需要一段時間才能發現守護進程已經崩潰。我希望在發生崩潰時立即收到某種通知,即使電子郵件也沒問題。我找不到man gdb的幫助。 (如果有的話)是如何實現的?如何讓gdb在接收信號時發送外部通知?
~ $ gdb --version
GNU gdb (Gentoo 7.2 p1) 7.2
看起來好像我已經解決了這個問題,過了一段時間後又回來了。在Make gdb quit automatically on successful termination?的答案之一中,提示大約$ _exitcode讓我走上了路徑,並且一些Google搜索出現了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
東西便宜又醜:
while sleep 30 ; ps auxw | grep progname | grep " t "` && mail -s CRASHED [email protected] < /etc/hostname ; done
如果你想它唯一的郵件一次;),那麼還有更多的工作要做。但每30秒發一封電子郵件,直到你殺死這可能只是一個竅門。