Mat*_*ner 11 c linux gdb ubuntu-10.04
我使用一个调试脚本,它使用调试器连续运行几个相关的进程.我目前正在使用-x自动执行多个命令(例如run).调试过程成功终止后,如何自动退出gdb?向quit命令文件添加命令将导致该命令不仅在成功终止时处理,而且在发生错误时(当我宁愿接管那个点时).
以下是正在发生的事情的摘录:
+ gdb -return-child-result -x gdbbatch --args ./mkfs.cpfs /dev/loop0 GNU gdb (GDB) 7.1-ubuntu Reading symbols from /home/matt/cpfs/mkfs.cpfs...done. Program exited normally. Breakpoint 2 at 0x805224f: file log.c, line 32. (gdb)
内容gdbbatch:
start b cpfs_log if level >= WARNING
Mat*_*ery 11
$_exitcode程序成功终止时gdb设置.您可以使用它 - 在脚本开头将其设置为不太可能的值,并且仅quit在结束时将其设置为已更改:
set $_exitcode = -999
# ...
run
# ...
if $_exitcode != -999
quit
end
Run Code Online (Sandbox Code Playgroud)
(设置$_exitcode为不太可能的值有点难看,但如果程序没有终止则根本不会定义,并且似乎没有任何明显的方式来询问"这个变量是否定义了?"有条件的.)
我想我已经找到了一个完整的解决方案来解决你的问题,如何让gdb在收到信号时发送外部通知?.这里没有其他人似乎提到或发现了gdb钩子.
根据Matthew关于$ _exitcode的提示,现在我的app/.gdbinit实现了所需的行为; 成功终止时正常退出并退回到gdb提示,发送电子邮件,以及其他所有内容:
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
Run Code Online (Sandbox Code Playgroud)