gpt4 book ai didi

debugging - 使用 -g3 和 -O3 编译

转载 作者:行者123 更新时间:2023-12-03 16:24:14 27 4
gpt4 key购买 nike

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

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

最佳答案

有时人们会编写糟糕的代码——例如,可能会导致未定义行为的代码。现在让我们说,在低优化或没有优化的情况下,未定义的行为似乎“正常”工作,但它会导致 -O3 灾难性的崩溃。你会想要在 -O3 调试这个问题,对吗?因此,您别无选择,只能添加 -g 标志并前往镇上,即使调试体验可能会因优化而有所妥协。

一般来说,构建系统将“调试/发布”轴与“优化/未优化”轴混为一谈是一个大问题。真的,它们应该是正交的——例如,通常需要使用日志记录进行“调试”构建,但在启用优化的情况下仍然可以快速运行。同样,如果优化构建中没有可用的调试符号,则可能很难追踪与优化器相关的错误。

                   +--------------------------------+
| Optimizations |
+-----------------+--------------+
| On | Off |
+----------+------+-----------------+--------------+
| | On | Debug optimized | Best debug |
| Debug | | code | experience |
| Logging/ +------+-----------------+--------------+
| Symbols | Off | Release build | Probably not |
| | | for customers | useful |
+----------+------+-----------------+--------------+

关于debugging - 使用 -g3 和 -O3 编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18000214/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com