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