我的C++应用程序给了我一些奇怪的输出,但它运行到完成,我想检查堆栈跟踪,但由于它没有分段错误,因此很难确定它在哪里。我尝试在 exit
、_exit
和 abort
上设置断点,但是当我调用堆栈时,我得到这样的内容
#0 0x00002aaaab1a7620 in exit () from /lib64/libc.so.6
#1 0x000000000041f19e in main ()
这可能是因为我的应用程序有一个用 sig 包装的 perl 前端,有没有另一种方法可以在完成后生成堆栈?
这就是堆栈跟踪应该的样子。 主调用在末尾退出,并在 exit 中打印堆栈跟踪。找不到堆栈跟踪发生某些事情的位置。找到发生某些事情的位置后,您可以在那里获取堆栈跟踪并找出执行如何到达那里。
您要查找的任何输出都发生在退出之前,并且在您获得堆栈跟踪时该函数已经返回。因此,您需要在输出发生之前放置断点。然后,您可以逐行浏览代码以找出输出的行。
你在调试中构建了吗?
- 添加带有"B function_name"的断点
- 按 C 继续
- 键入 BT 以打印回溯