为了给出一些上下文,我在谈论用g ++编译C ++代码。
我可以看到如何在生产版本中加入-g标志以便于维护:如果程序意外崩溃,程序将更容易调试。
我的问题是,包括-g标志是否以任何其他方式影响输出可执行文件而不是增加其大小?它可以以某种方式使代码更慢(例如通过关闭某些优化)?
根据我的理解,它不应该(文档只提到包含调试符号),但我不确定。
答案 0 :(得分:13)
-g标志不会影响代码生成,只会更改符号表和调试元数据。那些不在可执行代码部分,因此当代码在hte调试器之外运行时,它们甚至不会影响性能。
答案 1 :(得分:4)
我记得读过某些优化已使用调试符号关闭:How Does The Debugging Option -g Change the Binary Executable?
Googling还会显示与此主题相关的更多帖子。
除非你的代码对性能非常敏感,否则我认为它不会真正影响你;除此之外,我不知道我的头顶有什么缺点(除了更大的二进制文件)。
答案 2 :(得分:0)
我的问题是,包括-g标志是否会以任何其他方式影响输出可执行文件而不是增加其大小?
不,完全可以使用调试信息生成优化的二进制文件,这不会以任何方式影响正常代码(尽管该信息可能不太有用,因为变量不需要存在于时间,内联函数更难调试等。)
Debian发行版使用调试信息构建包,稍后将其删除(有时会拆分为“调试包”)。
但请注意,尺寸增加可能非常大。