15

只是为了提供一些上下文,我在这里谈论使用 g++ 编译 C++ 代码。

我可以看到在生产构建中包含 -g 标志将如何方便维护:如果程序意外崩溃,调试起来会容易得多。

我的问题是,包含 -g 标志是否会以任何其他方式影响输出可执行文件,而不是增加其大小?它能否以某种方式使代码变慢(例如通过关闭某些优化)?

据我了解,它不应该(文档只提到包含调试符号),但我不确定。

4

3 回答 3

14

-g 标志不影响代码生成,仅更改符号表和调试元数据。这些并不存在于可执行代码部分,因此当代码在 hte 调试器之外运行时,它们甚至不会影响性能。

于 2012-06-11T22:28:51.033 回答
6

我记得读过某些优化是用调试符号关闭的:调试选项 -g 如何更改二进制可执行文件?

谷歌搜索还显示更多与该主题相关的帖子。

不过,除非您的代码对性能非常敏感,否则我认为它不会真正影响您;而且,除此之外,我不知道有什么缺点(除了更大的二进制文件)。

于 2012-06-11T22:30:38.680 回答
0

我的问题是,包含 -g 标志是否会以任何其他方式影响输出可执行文件,而不是增加其大小?

不,完全有可能生成带有调试信息的优化二进制文件,这不会以任何方式影响正常代码(尽管该信息可能不太有用,因为有时不需要存在变量,内联函数更难调试等。 )

Debian 发行版构建带有调试信息的软件包,这些信息稍后会被剥离(有时会拆分为“调试软件包”)。

但是请注意,尺寸增加可能非常大。

于 2012-06-11T22:36:56.287 回答