在C++中,可以使用"-Og“或"/Og”(可能还有其他编译器上的其他标志)来启用“优化调试体验”的编译标志。
此标志支持非常基本的优化,这些优化不会干扰调试体验(据我理解)。但这确实意味着编译器所做的琐碎或“免费”的优化是为程序启用的,这样您就不必担心这个问题了。
在GCC最优选择中,“优化调试体验”是:
优化调试经验。-Og应该是标准编辑编译调试周期的最优选择,在保持快速编译的同时提供合理的优化水平和良好的调试经验。这是一个比-O0更好的选择,用于生成可调试的代码,因为一些收集调试信息的编译器通过-O0时是禁用的。
我想知道在某个地方是否有一个选项可以实现同样的福利,或者是否计划了任何这样的选择。理想情况下,它可以通过货物和以尽可能跨平台的方式启用。
请注意,我不是在问“opt级别”,它相当于"-O1、-02等“。
发布于 2020-06-20 22:58:28
在生锈货物简介中,您将看到名为dev
的默认编译配置文件如下所示:
[profile.dev]
opt-level = 0
debug = true
debug-assertions = true
overflow-checks = true
lto = false
panic = 'unwind'
incremental = true
codegen-units = 256
rpath = false
由于debug = true
意味着存储完整的调试信息,这意味着项目的编译对象已经准备好进行调试,尽管没有优化。目前货物中没有旗子,也没有沙沙来“优化调试体验”。虽然我们可以确定调试符号是保留的,但与GCC所说的“调试信息在-O0
__中丢失”不同,应用优化并且仍然有良好的调试体验是一种折衷的游戏:特别是,LLVM提供了一些保证,但是在调试模式下导航和处理属性的能力可能会受到损害(相关的LLVM文档页面)。
如果我们采用“改进调试体验”的真正含义,这是可以根据具体情况,通过调整编译配置文件来完成的。例如,在实时程序开发(如视频游戏开发)中,应用一些代码优化以使运行时性能可以承受是一种常见的要求。查看Rustc关于代码-gen选项的书以查看在这一端可以做的事情。每个opt-level
都会以自己的方式为这种体验做出贡献。
另请参阅:
https://stackoverflow.com/questions/62492560
复制相似问题