无法看到导致核心转储终止的异常

时间:2018-01-04 17:42:50

标签: c++ exception coredump

我有一个用ARM编写的用c ++编写的多线程程序 我通过运行启用了应用程序的全局核心转储:
echo“/var/log/core.%e.%t”>的/ proc / SYS /内核/ core_pattern
ulimit -c unlimited

程序中抛出了一个未被捕获的异常 我打开使用eclipse生成的核心转储 我希望看到在callstack中抛出异常的代码 但我看不到它。

Print screen from eclipse

其他线程的其余callstack看起来没问题 我试图手动将callstack中第一行的$ SP更改为详细的termiate行中定义的地址:0xb6eba0d8,但这会导致callstack仅显示系统调用行

如何在此线程的堆栈中看到更多行?

1 个答案:

答案 0 :(得分:0)

有两个问题:

  1. 堆叠被解开。直到GCC 8 - 当使用std :: thread时,libstdc ++调用用户线程函数的函数包含一个try / catch all语句。使用pthread代替解决了这个问题。有关详细信息,请参阅https://gcc.gnu.org/bugzilla/show_bug.cgi?id=55917

  2. 我在尝试调试时使用了没有调试符号的libstdc ++。线程调用的函数是使用调试符号编译的,但这还不够。我使用file命令看到/ usr / lib中的库没有调试符号,所以我使用了我的Linaro发行版安装中的库。