Linux 上的崩溃分析
Posted
技术标签:
【中文标题】Linux 上的崩溃分析【英文标题】:Crash Analysis on Linux 【发布时间】:2011-03-21 14:39:50 【问题描述】:在 Linux 上分析崩溃的最佳方法是什么?
我们希望构建软件并向测试人员提供发布版本。测试人员可能无法记住如何重现崩溃,或者崩溃可能完全是间歇性的。他们的机器上也不会有开发环境。该软件使用 C/C++ 编写,并编译为本地机器代码以供分发。
【问题讨论】:
可能重复***.com/questions/914833/…sigaction
: ***.com/a/32799720/1599699
【参考方案1】:
如果磁盘上有空间,让应用程序在崩溃时创建它的核心转储。
ulimit -c unlimited
稍后您可以使用 GDB 对其进行调试。
【讨论】:
【参考方案2】:我相信您正在寻找的是:How to generate a stacktrace when my gcc C++ app crashes
【讨论】:
【参考方案3】:除了已经提到的核心转储和堆栈跟踪之外 - 确保您可以轻松识别人们正在运行您的可执行文件的哪些版本,并且能够回答每个源文件的哪个版本进入哪个二进制版本(即花一些时间与您的源代码控制系统和您的构建脚本)。否则,无论是核心文件还是堆栈跟踪都无济于事。
【讨论】:
【参考方案4】:核心转储很有帮助,但它们并不总能告诉您您想知道的关于您如何最终陷入错误状态的所有信息。
记录操作、输入和事件非常有用。如果您能够以这样一种方式记录程序的每次运行,以便在发生崩溃时开发人员可以访问日志并重新生成错误,那将非常有帮助。
如果可能,您应该使用生成的最多调试符号来构建程序,然后如果您不希望或不能让您的发布版本拥有它们,则将它们剥离,但保留每个已发布版本的副本,其中包含调试符号如果需要调试崩溃,可以加上核心文件。
【讨论】:
【参考方案5】:除了generating a stacktrace in a SIGSEGV
handler 和/或generating a core dump,find where an uncaught C++ exception is thrown 也可能有用。
【讨论】:
以上是关于Linux 上的崩溃分析的主要内容,如果未能解决你的问题,请参考以下文章