g ++ - 正在使用"-g"标志进行生产构建一个好主意?

12 c++ g++

为了给出一些上下文,我在谈论用g ++编译C++代码.

我可以看到为生产构建包含-g标志如何便于维护:如果程序意外崩溃,程序将更容易调试.

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

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

And*_*oss 13

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


Meh*_*dad 5

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

Google搜索还显示了与此主题相关的更多帖子。

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

  • 在阅读这些文档时,只有gcc以外的编译器的优化受-g的影响。我的经验是,对于gcc,它的发展方向是相反的:您在调试器中看到和执行的操作会受到优化的影响-有时会受到严重影响。当然,这是您从积极优化中获得的期望:您无法调试不存在的内容。 (2认同)