2011-01-30 75 views
1

我在tmux會話內的gdb內部調試運行守護進程應用程序,前臺模式。這個守護進程偶爾會碰到一個SIGSEGV。這次崩潰的結果並不是立刻對外界顯而易見的,因此我可能需要一段時間才能發現守護進程已經崩潰。我希望在發生崩潰時立即收到某種通知,即使電子郵件也沒問題。我找不到man gdb的幫助。 (如果有的話)是如何實現的?如何讓gdb在接收信號時發送外部通知?

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

回答

0

看起來好像我已經解決了這個問題,過了一段時間後又回來了。在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 
0

東西便宜又醜:

while sleep 30 ; ps auxw | grep progname | grep " t "` && mail -s CRASHED [email protected] < /etc/hostname ; done 

如果你想它唯一的郵件一次;),那麼還有更多的工作要做。但每30秒發一封電子郵件,直到你殺死這可能只是一個竅門。

相關問題