2014-02-11 36 views
1

我的C++应用程序给我一些奇怪的输出,但它运行完成,我想检查堆栈跟踪,但由于它不是segfaulting,因此很难确定它在哪里。我试过在exit_exitabort设置断点,但是当我打电话堆栈我得到这样的在gdb中退出时生成堆栈跟踪

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

这可能是因为我的应用程序有一个perl前端包裹着SIG,有完成后生成堆栈的另一种方法?

+0

你的调用堆栈只是意味着没有人调用'exit()'直到'main()'中的'0x0411f19e'。如果您质疑好奇地省略的“奇怪输出”,您可能应该交互式调试该过程。 – WhozCraig

+1

什么奇怪的输出?也许知道这将意味着放置断点的适当位置。 – ikegami

+0

[GDB - 如何从程序退出的位置找到]的可能重复(https://stackoverflow.com/questions/6376869/gdb-how-to-find-out-from-where-program-exited) –

回答

0

你在调试中构建它吗?

  • 添加断点以“b函数名”
  • 按c继续
  • 型BT打印回溯
1

这是堆栈跟踪应该是什么样子。主要调用在结束时退出,并在出口内打印堆栈跟踪。您无法找到堆栈跟踪发生的事情。一旦你发现事情发生的地方,你可以在那里得到堆栈跟踪,并找出执行到那里的方式。

无论您在寻找什么输出发生在退出之前,并且该函数已经在您获取堆栈跟踪时返回。所以,你需要在输出发生之前放置你的断点。然后,您可以逐行检查代码,找出输出的是哪一行。