我如何找出gdb停止的原因

时间:2014-02-17 14:15:19

标签: c++ gdb

使用GDB调试程序时,我一直遇到程序在调试模式下停止的问题。当我进行回溯时,我发现它深入一个专有的第三方库调用堆栈,我正在寻找为什么程序已经停止。我仍然只是一个GDB初学者,所以我仍然不确定如何做到这一点。看一下回溯,我注意到来自/usr/lib64/libstdc++.so.6的“__cxa_throw()”所以我假设抛出某种异常,但我想知道如何获得更多关于它的信息,如果可能的。

2 个答案:

答案 0 :(得分:1)

尝试使用backtrace命令,该命令将显示程序的状态。 Here您可以找到更多详细信息。

答案 1 :(得分:0)

  

如何找出gdb停止的原因

GDB通常会立即告诉您,例如

Program received signal SIGABRT, Aborted.
0x00007ffff7750425 in __GI_raise (sig=<optimized out>)

程序停止了,因为它收到了一个信号。

  

我发现它深入到专有的第三方库调用堆栈中,我希望找出程序停止的原因。

由于GDB告诉你的原因,它已完全停止

  

看着回溯,我注意到__cxa_throw() from /usr/lib64/libstdc++.so.6所以我假设某种异常被抛出,但我想知道如何获得更多相关信息。

__cxa_throw的存在确实表明已抛出异常(并且std::terminate()的存在表明它是未被捕获的异常)。

如果没有第三方库的调试信息,您找到原因的选择是有限的:

  • 您可以阅读此库的文档,并仔细检查您是否违反了所需的任何先决条件
  • 您可以反汇编调用__cxa_throw的例程,并找出调用该例程的确切原因。