【发布时间】:2015-10-31 05:52:27
【问题描述】:
为了使正在运行的程序异常退出时能够创建核心转储,是否需要在编译期间为gcc指定调试选项-g?
【问题讨论】:
为了使正在运行的程序异常退出时能够创建核心转储,是否需要在编译期间为gcc指定调试选项-g?
【问题讨论】:
不,您的程序将正常转储核心。然而,它将缺少调试符号,这意味着很难将核心转储与原始代码匹配。
【讨论】:
不,这是两个不同的东西。然而,启用调试信息可能是一个好主意,因为它使核心转储更加有用。
如果您遇到可执行文件已发送给客户的情况,或者由于其他原因不想发送调试信息,那么您仍然想做的是使用 -g 标志进行构建,然后剥离调试来自可执行文件的信息并发布。
这样您最终会得到两个可执行文件,一个没有您发布的调试信息,一个带有您归档的调试信息。这将使您可以在/如果程序崩溃时分析核心转储。您只需将未剥离的可执行文件提供给调试器,而不是实际使用(剥离)的可执行文件。
如果您的构建过程是确定性的,另一种选择是归档源代码(例如通过使用修订控制系统)。然后您应该能够通过重建(现在使用 -g 标志)来创建调试信息。虽然这不是一个好主意,因为构建系统不是确定性的原因有很多 - 认为它更有可能从忘记 -g 标志的情况中恢复。
【讨论】: