pat*_*cek 3 compiler-construction debugging optimization gcc build
我见过的大多数构建环境至少有两个策略:调试构建与最终/优化/发布构建.与海湾合作委员会,这通常意味着一些版本-g
VS -O
.现在我看到的情况是构建优化的构建,-O3
而调试版本是用-g3
和 构建的-O3
.man gcc
确实表明这是可能的,但这对我来说似乎违反了实际的调试目的.
回顾http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html提醒我-Og
,它允许不干扰调试的优化.这对我来说很有意义,但-O3 -g3
除非你基本上试图调试gcc自己的优化能力,否则有什么令人信服的理由可以进行调试?
例如,有时候人们编写错误的代码 - 可能是导致未定义行为的代码.现在让我们说,在低优化或无优化的情况下,未定义的行为似乎"正确"工作,但它会导致灾难性的崩溃-O3
.您将要调试此问题-O3
,对吧?那么你就别无选择,只能添加一个-g
标志并进入城镇,即使调试经验可能会受到优化的影响.
一般来说,构建系统将"调试/释放"轴与"优化/未优化"轴相混合存在一个大问题.实际上,它们应该是正交的 - 例如,通常需要使用日志记录进行"调试"构建,但仍然可以在启用优化的情况下快速运行.同样,在优化构建中没有可用的调试符号的情况下,跟踪与优化器相关的错误可能非常困难.
+--------------------------------+
| Optimizations |
+-----------------+--------------+
| On | Off |
+---------+------+-----------------+--------------+
| | On | Debug optimized | Best debug |
| Debug | | code | experience |
| Symbols +------+-----------------+--------------+
| | Off | Release build | Probably not |
| | | for customers | useful |
+---------+------+-----------------+--------------+
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1280 次 |
最近记录: |