2

我正在用 gdb 调试我的程序。我可以使用这些-x选项进行非交互式调试。

gdb -x gdbinit ./myprogram

文件内容gdbinit

handle SIGINT pass nostop noprint
handle SIGQUIT pass nostop noprint
handle SIGUSR1 pass nostop noprint
handle SIGUSR2 pass nostop noprint
run
backtrace
quit

gdb 不处理这四个信号,因为我的程序需要它们才能正常工作。

backtrace命令对于在崩溃后进行回溯很有用。

quit命令使 gdb 在程序执行后退出,即使它已经崩溃。

我只想在程序成功完成时自动退出。在其他情况下,gdb 应该可用于分析回溯和其他事情。

仅当程序无错误退出时,gdb 如何才能退出?

4

1 回答 1

8

使用$_exitcode GDB 便利变量。在上面的 gdb 脚本中,替换:

run

和:

set $_exitcode = -1
run
if $_exitcode != -1 
    quit
end

并删除最后的quit行应该可以工作。使用-1不可能的值是可行的,因为在 POSIX 中只能使用退出状态的低 8 位。WEXITSTATUS()(见等待(2))。

要使用 GDB Python API 来完成同样的事情,请参见此处

于 2012-11-08T21:48:33.957 回答