在gdb中运行程序,但忽略正常退出?
我们使用gdb从运行squid-这样我们可以自动生成用于调试的回溯在gdb中运行程序,但忽略正常退出?,gdb,squid,Gdb,Squid,我们使用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 $ba
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
但是,时不时地,squid“只是”被停止和重新启动,根本不涉及崩溃。在这种情况下,我仍然收到一封电子邮件,其中包含:
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文件以避免这种情况?这可以使用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
if gdb your args here; then
mail results
fi