首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用-g3和-O3进行编译

使用-g3和-O3进行编译
EN

Stack Overflow用户
提问于 2013-08-01 17:01:32
回答 1查看 2.8K关注 0票数 6

我见过的大多数构建环境至少有两种策略:调试构建与最终/优化/发布构建。对于gcc来说,这通常意味着-g-O的某些版本。现在,我看到了这样一种情况:优化的构建是用-O3构建的,而调试版本是用-g3-O3构建的。man gcc确实表明这是可能的,但对于实际调试而言,这似乎与我的直觉相悖。

回顾http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html使我想起了-Og,它允许不干扰调试的优化。这对我来说是有意义的,但是,除非您基本上尝试调试gcc自己的优化能力,否则用-O3 -g3进行调试有什么令人信服的理由呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-01 17:08:53

有时候,人们会写不好的代码--例如,那些导致未定义行为的代码。现在,假设这种未定义的行为在低优化或不优化的情况下似乎“正确”工作,但是它会在-O3造成灾难性的崩溃。您想在-O3调试这个问题,对吗?因此,您别无选择,只能添加一个-g标志并进城,即使调试经验可能会受到一些优化的影响。

一般来说,构建系统将“调试/发布”轴与“优化/未优化”轴混为一谈,存在一个大问题。实际上,它们应该是正交的--例如,通常希望有一个带有日志记录的“调试”构建,但仍然在启用优化的情况下快速运行。类似地,如果在优化的构建中没有可用的调试符号,可能很难跟踪与优化器相关的bug。

代码语言:javascript
运行
复制
                   +--------------------------------+
                   |           Optimizations        |
                   +-----------------+--------------+
                   |        On       |     Off      |
 +----------+------+-----------------+--------------+
 |          |  On  | Debug optimized |  Best debug  |
 |  Debug   |      |    code         |  experience  |
 | Logging/ +------+-----------------+--------------+
 | Symbols  |  Off |   Release build | Probably not |
 |          |      |  for customers  |    useful    |
 +----------+------+-----------------+--------------+
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18000214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档