在展开堆栈之前获取回溯

时间:2015-11-13 11:36:43

标签: c++ c linux gcc gdb

我的进程没有在调试器上运行,而是在发生崩溃时生成核心文件。 更新:由于异常而发生崩溃。从throw()开始,即使在main()范围内也没有处理它。

当我附加它并在调试器中运行它时它确实生成了正确的回溯,但在核心文件中它没有。

问题可能是操作系统在将控制权传递给终止之前展开堆栈,所以当终止生成SIGABT时,它没有关于前一个堆栈的信息。

我因压力记忆测试而崩溃了,所以我无法在gdb下进行此操作。

怎么办?任何解决方法

1 个答案:

答案 0 :(得分:1)

  

问题可能是操作系统在传递控制终止之前展开堆栈

Linux操作系统没有这样做。

你没有提供相关的细节,但是导致“坏”的两个最常见的原因是什么?来自核心转储的堆栈跟踪是:

  1. 耗尽ulimit -c并获得截断的核心转储,或
  2. 尝试使用与生成它的系统库不同的系统库来分析core。如果您在不同的计算机上生成和分析core,或者您之间已经升级了系统库,则可能会发生这种情况。