【问题标题】:get the backtrace before unwinding the stack在展开堆栈之前获取回溯
【发布时间】:2015-11-13 11:36:43
【问题描述】:

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

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

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

我在进行压力记忆测试时遇到了这个崩溃,所以我无法在 gdb 下运行它。

怎么办?随便走走

【问题讨论】:

    标签: c++ c linux gcc gdb


    【解决方案1】:

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

    Linux 操作系统不做这样的事情。

    您没有提供相关详细信息,但核心转储中“错误”堆栈跟踪的两个最常见原因是:

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

    【讨论】:

    • 不,我已经正确设置了这些限制。我将 ulimit 设置为“unlimited”,这是一个守护程序,因此我导出的 DAEMON_COREFILE_LIMIT 也设置为“unlimited”。所以 corefile 创建了我在 /etc/sysctl.conf 中提到的目录,它工作正常。抱歉,我忘记提及这是在抛出/发生异常时发生的。万一发生异常
    猜你喜欢
    • 2015-06-16
    • 2015-09-16
    • 1970-01-01
    • 2015-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多