启用核心转储是否需要-g用于gcc?

时间:2015-10-31 05:52:28

标签: c++ c gcc coredump

为了能够在运行程序异常退出时从正在运行的程序中创建核心转储,是否需要在编译期间为gcc指定调试选项-g?

2 个答案:

答案 0 :(得分:4)

不,你的程序将核心转储罚款。但它缺少调试符号,这意味着将核心转储与原始代码相匹配将非常困难。

答案 1 :(得分:2)

不,这是两件不同的事情。但是,启用调试信息可能是一个好主意,因为它使核心转储更有用。

如果您遇到可执行文件发送给客户的情况或由于某些其他原因而不想发送调试信息那么您想要做的事情仍然是使用-g标志构建然后剥离来自可执行文件的调试信息并发送给它。

通过这种方式,您最终会得到两个可执行文件,一个没有您发送的调试信息,另一个可以存档。这将使您可以在程序崩溃时分析核心转储。您只需将未提取的可执行文件提供给调试器,而不是实际使用的(剥离的)可执行文件。

如果构建过程是确定性的,另一种选择就是归档源代码(例如,使用修订控制系统)。然后,您应该能够通过重建(现在使用-g标志)来创建调试信息。这不是一个好主意,因为构建系统不具有确定性的原因很多 - 认为它更有可能从忘记-g标志的情况中恢复。