我们正在使用gdb运行squid - 这样我们就可以自动生成回溯以进行调试。
backtrace=`mktemp`
gdb -q -x /etc/service/squid3/gdbcommands /usr/sbin/squid 2>&1 >$backtrace
/usr/bin/mail -s "`hostname`: Squid was restarted (backtrace)" someaddress@charite.de < backtracetrace
rm $backtrace
/ etc / service / squid3 / gdbcommands 包含:
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
但是,时不时地,鱿鱼只是&#34;只是&#34;被阻止&amp;重新启动,完全没有崩溃。在这种情况下,我仍然收到一封包含以下内容的电子邮件:
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
当然没有堆叠,因为程序退出了。
如何更改gdbcommands文件以避免这种情况?
答案 0 :(得分: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