只是为了提供一些上下文,我在这里谈论使用 g++ 编译 C++ 代码。
我可以看到在生产构建中包含 -g 标志将如何方便维护:如果程序意外崩溃,调试起来会容易得多。
我的问题是,包含 -g 标志是否会以任何其他方式影响输出可执行文件,而不是增加其大小?它能否以某种方式使代码变慢(例如通过关闭某些优化)?
据我了解,它不应该(文档只提到包含调试符号),但我不确定。
-g 标志不影响代码生成,仅更改符号表和调试元数据。这些并不存在于可执行代码部分,因此当代码在 hte 调试器之外运行时,它们甚至不会影响性能。
我记得读过某些优化是用调试符号关闭的:调试选项 -g 如何更改二进制可执行文件?
谷歌搜索还显示更多与该主题相关的帖子。
不过,除非您的代码对性能非常敏感,否则我认为它不会真正影响您;而且,除此之外,我不知道有什么缺点(除了更大的二进制文件)。
我的问题是,包含 -g 标志是否会以任何其他方式影响输出可执行文件,而不是增加其大小?
不,完全有可能生成带有调试信息的优化二进制文件,这不会以任何方式影响正常代码(尽管该信息可能不太有用,因为有时不需要存在变量,内联函数更难调试等。 )
Debian 发行版构建带有调试信息的软件包,这些信息稍后会被剥离(有时会拆分为“调试软件包”)。
但是请注意,尺寸增加可能非常大。