使用-g -O和strip进行构建与使用-O进行构建是否存在缺点

时间:2011-06-06 08:54:19

标签: c gcc

我有Linux的C代码可执行文件。

要发布,我可以有两个选择:

一个是使用-g -O3构建,剥离调试(strip -g)并将输出作为发布发送。 第二是使用-O3直接构建版本。

如果我理解正确,第一个选项的优点是我可以在剥离之前使用exe进行远程调试或分析核心转储。

问题是这种方法是否有任何缺点,即使用-g进行构建然后剥离是否存在运行时性能开销

感谢。

1 个答案:

答案 0 :(得分:8)

使用-g没有运行时性能损失。调试信息位于可执行文件的单独部分,如果您执行该文件,它甚至不会被加载。

但是如果您愿意,可以将调试信息和可执行文件分开(这仍然不会产生任何性能差异)。我的Gentoo Linux以这种方式处理它,原因是简单地减少了使用的磁盘空间,这使得我可以在一个小型快速磁盘上保留所有二进制文件,同时仍然在一个单独的分区中保留调试信息(这是最常用的)。

objcopy --only-keep-debug foo foo.debug
strip -g foo

现在你有一个foo可执行文件和一个包含调试符号的foo.debug。