【问题标题】:How does gdb retrieve the exit code of target program?gdb如何检索目标程序的退出码?
【发布时间】:2023-03-04 14:07:01
【问题描述】:

在命令行下,我知道使用 echo $?让我退出代码。在gdb中,我使用“r”来运行程序并且程序终止,那么gdb是如何得到这个退出代码的呢? gdb 里面有什么命令吗?

谢谢!

【问题讨论】:

  • 您的问题是关于如何在 GDB 中打印退出值(Tom Tromey 回答)还是 GDB 如何在内部获取该值?

标签: gdb echo exit terminate


【解决方案1】:

当程序退出时,gdb 将便利变量$_exitcode 设置为退出代码。

所以给定:

int main() {
  return 23;
}

在 gdb 中运行,我得到:

(gdb) run
Starting program: /tmp/q 
[Inferior 1 (process 3677) exited with code 027]
(gdb) print $_exitcode
$1 = 23

【讨论】:

  • [Inferior 1 (process 3677) exited with code 027] unix.stackexchange.com/questions/24368/…...
【解决方案2】:

它只是在程序终止时在调试会话结束时打印退出代码。或为0 退出代码打印exited normally。请参阅此测试程序的测试调试会话:

#include <stdlib.h>

int main(int argc, char *argv[]) {
    return atoi(argv[1]);
}

调试会话:

[ksemenov@NB824RIH ~]$ gdb -q ./a.out
Reading symbols from ./a.out...(no debugging symbols found)...done.
(gdb) r 0
Starting program: /home/ksemenov/a.out 0
Missing separate debuginfos, use: dnf debuginfo-install glibc-2.23.1-10.fc24.x86_64
[Inferior 1 (process 19162) exited normally]
(gdb) r 1
Starting program: /home/ksemenov/a.out 1
[Inferior 1 (process 19166) exited with code 01]
(gdb) r 6
Starting program: /home/ksemenov/a.out 6
[Inferior 1 (process 19167) exited with code 06]
(gdb) 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多