1

tmuxセッション内のgdb内でフォアグラウンドモードでデーモンアプリケーションをデバッグ実行しています。このデーモンは、SIGSEGVでクラッシュすることがあります。このクラッシュの結果は外の世界にはすぐにはわかりません。そのため、デーモンがクラッシュしたことを発見するのにしばらく時間がかかる場合があります。クラッシュが発生したらすぐに何らかの通知を受け取りたいのですが、電子メールでも問題ありません。mangdbからの助けは見つかりませんでした。これは(もしあれば)どのように達成されますか?

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

2 に答える 2

0

安くて醜いもの:

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

一度だけメールを送信したい場合は;)さらに多くの作業を行う必要があります。しかし、これを殺すまで30秒ごとに電子メールを送信するのは、単なるトリックかもしれません。

于 2011-01-30T22:27:54.913 に答える
0

しばらくして、これを解決したようです。正常終了時にgdbを自動的に終了させるための回答の1つにある$_exitcodeに関するヒント 私を道に連れて行ってください、そして、いくつかのグーグルはgdbフックを上げました。

いくつかの実験の後、これは私がこのアプリの.gdbinitに対して今持っているものです。良いことは、シグナルを区別できるので、通常のkillコマンドを使用すると、3つの頭を持つモンスター(tmux + gdb + app)から通常の完全な終了が得られますが、通常とは異なるものはgdbシェルにドロップされ、メールが送信されます。そして私が診断するために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
于 2011-03-12T22:38:10.980 に答える