在 C++ 中,您可以使用“-Og”或“/Og”(以及其他编译器上可能的其他标志)启用“优化调试体验”的编译标志。
此标志支持非常基本的优化,不会干扰调试体验(据我所知)。但这确实意味着编译器对程序进行了简单的或“免费”的优化,您不必担心。
来自GCC optimise options ,“优化调试体验”为:
Optimize debugging experience. -Og should be the optimization level of choice for the standard edit-compile-debug cycle, offering a reasonable level of optimization while maintaining fast compilation and a good debugging experience. It is a better choice than -O0 for producing debuggable code because some compiler passes that collect debug information are disabled at -O0.
我想知道是否有一个选项可以实现相同类型的好处,或者是否计划有任何此类选项。理想情况下,可以通过 cargo 并以尽可能跨平台的方式启用。
请注意,我并不是在询问“opt-levels”,它相当于“-O1、-02 等”。
最佳答案
在 Rust Cargo book on Profiles ,您将看到默认的编译配置文件,名为 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
意味着存储了完整的调试信息,这意味着项目的编译对象已经准备好进行调试,尽管没有进行优化。目前 Cargo 和 rustc 中都没有“优化调试体验”的标志。虽然我们可以确定保留了调试符号,但与 GCC 所说的“-O0 会丢失某些 channel 中的调试信息”不同,应用优化后仍然有良好的调试体验是一种权衡游戏:特别是,LLVM 提供了一些保证,但在 Debug模式下导航和使用属性的能力可能会受到损害 ( relevant LLVM documentation page )。
如果我们理解“改善调试体验”的真正含义,那么这可以通过调整编译配置文件根据具体情况来完成。例如,实时程序开发(例如视频游戏开发)中的常见要求是应用一些代码优化以使运行时性能可以承受。请参阅Rustc book on code-gen options看看为此可以做些什么。每个opt-level
都会以自己的方式为这种体验做出贡献。
另请参阅:
关于rust - Rust 中是否有 "Optimize debugging experience"编译器标志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62492560/