【发布时间】:2011-03-21 14:39:50
【问题描述】:
在 Linux 上分析崩溃的最佳方法是什么?
我们希望构建软件并向测试人员提供发布版本。测试人员可能无法记住如何重现崩溃,或者崩溃可能完全是间歇性的。他们的机器上也不会有开发环境。该软件使用 C/C++ 编写,并编译为本地机器代码以供分发。
【问题讨论】:
在 Linux 上分析崩溃的最佳方法是什么?
我们希望构建软件并向测试人员提供发布版本。测试人员可能无法记住如何重现崩溃,或者崩溃可能完全是间歇性的。他们的机器上也不会有开发环境。该软件使用 C/C++ 编写,并编译为本地机器代码以供分发。
【问题讨论】:
如果磁盘上有空间,让应用程序在崩溃时创建它的核心转储。
ulimit -c unlimited
稍后您可以使用 GDB 对其进行调试。
【讨论】:
【讨论】:
除了已经提到的核心转储和堆栈跟踪之外 - 确保您可以轻松识别人们正在运行您的可执行文件的哪些版本,并且能够回答每个源文件的哪个版本进入哪个二进制版本(即花一些时间与您的源代码控制系统和您的构建脚本)。否则,无论是核心文件还是堆栈跟踪都无济于事。
【讨论】:
核心转储很有帮助,但它们并不总能告诉您您想知道的关于您如何最终陷入错误状态的所有信息。
记录操作、输入和事件非常有用。如果您能够以这样一种方式记录程序的每次运行,以便在发生崩溃时开发人员可以访问日志并重新生成错误,那将非常有帮助。
如果可能,您应该使用生成的最多调试符号来构建程序,然后如果您不希望或不能让您的发布版本拥有它们,则将它们剥离,但保留每个已发布版本的副本,其中包含调试符号如果需要调试崩溃,可以加上核心文件。
【讨论】: