如何找出gdb停止的原因
How do I find out why gdb has stopped
在使用GDB调试程序时,我遇到了程序在调试模式下停止的问题。当我进行回溯时,我发现它深入到专有的第三方库调用堆栈中,我正在寻找程序停止的确切原因。我仍然只是一个GDB的初学者,所以我仍然不确定如何做到这一点。查看回溯,我注意到"__cxa_sthrow()from/usr/lib64/libstdc++.so.6",所以我假设抛出了某种异常,但如果可能的话,我想知道如何获得更多信息。
尝试使用backtrace
命令,该命令将显示程序是如何进入当前状态的。在这里您可以找到更多详细信息。
如何找出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
的例程,并弄清楚调用该例程的确切原因
相关文章:
- 如何找出GDB的SIGTRAP核心转储的根本原因
- 如何找出引入AVX标志的内容
- 如何找出应用程序崩溃的原因 - Win 10 LTSB
- 无法找出我的代码中的内存泄漏
- C++找出覆盖同一行的数组
- 找出可变参数宏中的__VA_ARGS__类型
- 我正在尝试根据 4 个方程找出六个值
- 从utsname找出Linux操作系统名称
- 试图找出为什么我会收到运行时错误?
- 请找出我的代码中的错误,它在提交得到错误答案的同时仍然适用于我的所有测试用例
- UE4(С++) 我找出按下了哪个键
- VisualC++ 2010 有没有办法找出有关未处理异常错误的更多详细信息
- 试图找出为什么我的代码保持无限循环
- 在Hackerearth上获取运行时错误(SIGSEGV),无法找出代码中的问题
- 我无法找出我的代码出了什么问题
- 找出三个数,它们是给定数的除数,并且它们的和是最小的
- 图问题:找出两个节点是否在每个节点的O(1)时间和O(2)存储中共享同一分支
- 从文件中找出字符'a',然后计算字符出现的行数
- 如何找出为什么我的程序一直有一个无限循环?
- 如何找出gdb停止的原因