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

时间:2014-02-11 15:31:36

标签: c++ perl debugging gdb

我的C ++应用程序给了我一些奇怪的输出,但它运行完成,我想检查堆栈跟踪,但由于它不是segfaulting,因此更难确定它的位置。我已尝试在exit_exitabort上设置断点,但是当我调用堆栈时,我会得到类似的内容

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

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

2 个答案:

答案 0 :(得分:1)

这就是堆栈跟踪的样子。主调用在结尾处退出,并在出口内打印堆栈跟踪。你无法找到堆栈跟踪发生的事情。一旦找到发生的事情,就可以在那里获得堆栈跟踪并找出执行的执行方式。

在退出之前,您正在寻找的输出是什么,并且在您获得堆栈跟踪时该功能已经返回。因此,您需要在输出发生之前设置断点。然后你可以逐行查看代码,找出输出的哪一行。

答案 1 :(得分:0)

你是在调试中构建的吗?

  • 使用“b function_name”
  • 添加断点
  • 按c继续
  • 键入bt以打印回溯