成功终止后自动退出gdb?

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为不太可能的值有点难看,但如果程序没有终止则根本不会定义,并且似乎没有任何明显的方式来询问"这个变量是否定义了?"有条件的.)


lkr*_*aav 9

我想我已经找到了一个完整的解决方案来解决你的问题,如何让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)