在 gdb 中退出时生成堆栈跟踪



我的C++应用程序给了我一些奇怪的输出,但它运行到完成,我想检查堆栈跟踪,但由于它没有分段错误,因此很难确定它在哪里。我尝试在 exit_exitabort 上设置断点,但是当我调用堆栈时,我得到这样的内容

#0  0x00002aaaab1a7620 in exit () from /lib64/libc.so.6
#1  0x000000000041f19e in main ()

这可能是因为我的应用程序有一个用 sig 包装的 perl 前端,有没有另一种方法可以在完成后生成堆栈?

这就是堆栈跟踪应该的样子。 主调用在末尾退出,并在 exit 中打印堆栈跟踪。找不到堆栈跟踪发生某些事情的位置。找到发生某些事情的位置后,您可以在那里获取堆栈跟踪并找出执行如何到达那里。

您要查找的任何输出都发生在退出之前,并且在您获得堆栈跟踪时该函数已经返回。因此,您需要在输出发生之前放置断点。然后,您可以逐行浏览代码以找出输出的行。

你在调试中构建了吗?

  • 添加带有"B function_name"的断点
  • 按 C 继续
  • 键入 BT 以打印回溯

最新更新