在键入 'next' 命令后,gdb return 在执行下一个程序行时退出代码是什么?

what exit codes does gdb return on executing the next program line after one types the 'next' command?

在 linux 终端中,我输入了命令 why (此命令不存在),并得到了此响应

No command 'why'found, did you mean:
 ....
why: command not found

获取退出代码,这是我输入的:

$?

并得到回复:

127: command not found

我假设当大多数命令 运行 时,它们 return 代码。 现在用gdb,在它执行被调试的C程序的下一行后,它return有代码吗?如果是这样,我如何获得这些代码(gdb 中的 $? 之类的命令? - 我没有在 man gdb 中找到文档这样的命令的页面。

*在任何情况下,gdb 都应该知道(并可能记录)该行是否成功执行,如果不成功,出了什么问题。

没有一行代码可以成功执行,至少与 shell 命令执行的方式不同。

当您在 shell 时,您输入的是内部 shell 命令或外部程序的名称。在外部程序的情况下,$? 的值是程序传递给 exit 系统调用的值。如果 shell 找不到具有该名称的程序或命令,它会向您提供您描述的错误消息。

在编译的C程序中,语句运行后没有返回"codes"。程序中只有状态变化。例如,如果语句是 i = i + 1;,则 i 的值比语句 运行.

之前的值大 1

Unix 进程总是 return 一个值:它们的退出代码;之所以这样命名,是因为大多数程序都以调用 exit 结束(还有其他可能性,但此处不重要)。请注意 所有 处理 return 这样的代码,而不是 大多数 。 Shell 解释用户键入的行并将它们转换为进程。当进程终止时,shell 会让您知道它控制的最后一个进程的 return 代码的值。在 bash 中,这个变量是 $?。如果要打印,可以使用echo $?。如果您键入 $? 它将把它解释为命令,但 127(最后一个命令的退出值)不是命令。标准是 return 值为 0 表示正确终止进程,任何非空值表示程序逻辑某处发生错误。

gdb 也启动进程(以控制它们)但是,执行一行代码并不是 运行 进程,因此在执行程序代码的一个步骤后没有退出代码。当您在 gdb 中执行时,终止进程的内容在内部 gdb 变量 $_exitcode.

中可用,其退出代码可用