2017-01-04 10 views
1

gdbからsquidを実行しています。つまり、デバッグ用のバックトレースを自動的に生成することができます。/squid3/gdbcommandsgdbでプログラムを実行していますが、正常な終了を無視していますか?

backtrace=`mktemp` 
gdb -q -x /etc/service/squid3/gdbcommands /usr/sbin/squid 2>&1 >$backtrace 
/usr/bin/mail -s "`hostname`: Squid was restarted (backtrace)" [email protected] < backtracetrace 
rm $backtrace 

の/ etc /サービスが含まれています

set args -NsYC 
handle SIGPIPE pass nostop noprint 
handle SIGTERM pass nostop noprint 
handle SIGUSR1 pass nostop noprint 
handle SIGHUP pass nostop noprint 
handle SIGSEGV stop 
handle SIGABRT stop 
run 
set print pretty 
backtrace full 
generate-core-file 
quit 

しかし、すべての今して、 "ただ" ノークラッシュで、&を再起動停止しているイカがされては全く関与しています。その場合、私はまだ含む電子メールを取得しています。プログラムは、[OK]を終了しましたので、

Reading symbols from /usr/sbin/squid...done. 
    [Thread debugging using libthread_db enabled] 
    Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". 
    [Inferior 1 (process 57867) exited normally] 
    /etc/service/squid3/gdbcommands:10: Error in sourced command file: 
    No stack. 
    (gdb) quit 

そしてもちろんの

は、何のスタックはありません。

これを避けるにはどうすればgdbコマンドファイルを変更できますか?

答えて

1

これは、Pythonまたはgdb CLIを使用して実行できます。可能であれば、CLIを少しシンプルにしているので、私はそのアプローチをスケッチします。

まず、悪い出口でコアファイルを作成することもできます。そして、後でgdb終了コードを使用するので、呼び出しスクリプトに何が起こったかを伝えるように手配しましょう。

あなたの現在のスクリプトが書かれています:

backtrace full 
generate-core-file 
quit 

...代わりに使用します。

if !$_isvoid($_exitsignal) || (!$_isvoid($_exitcode) && $_exitcode != 0)) 
    backtrace full 
    generate-core-file 
    quit 0 
end 
quit 1 

その後、あなたの呼び出し元のスクリプトは、GDBの終了コードを確認することができます。

if gdb your args here; then 
    mail results 
fi 
関連する問題