在展开堆栈之前获取回溯信息。

3
我的进程未在调试器上运行,而是在崩溃发生时生成了一个核心文件。 更新:崩溃是由异常引起的。来自throw(),即使在main()范围内也没有处理。 当我在调试器中附加并运行时,它确实会正确生成回溯信息,但在核心文件中却没有。 问题可能是操作系统在将控制权传递给terminate之前解开堆栈,因此当terminate生成SIGABT时,它没有有关先前堆栈的信息。 我正在进行压力测试的内存测试中遇到此崩溃,所以无法在gdb下运行此项测试。 该怎么办?有什么解决方法吗?
1个回答

1
问题可能是操作系统在传递控制权给终止程序之前解开堆栈,而Linux操作系统不会这样做。您没有提供相关细节,但从核心转储中得到“错误”的堆栈跟踪的两个最常见原因是:1. 超出ulimit -c并获得截断的核心转储,或2. 尝试使用与用于生成它的系统库不同的系统库分析core。如果您在不同的计算机上生成和分析core,或者在之间升级了系统库,则可能会发生这种情况。

不,我已经正确设置了这些限制。我将ulimit设置为“无限制”,并且这是一个守护程序,因此我还导出了DAEMON_COREFILE_LIMIT,也将其设置为“无限制”。因此,corefile会创建我在/etc/sysctl.conf中提到的目录,并且运行良好。抱歉,我忘记提到这是在抛出/发生异常时发生的。在异常情况下。 - sandun dhammika

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接