Rust 中是否有 "Optimize debugging experience" 编译器标志?

Is there an "Optimize debugging experience" compiler flag in Rust?

在 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, you will see that the default compilation profile, named 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,应用优化后仍然有一个良好的调试体验有点权衡取舍:特别是 LLVM 提供了一些保证,但在调试模式下导航和使用属性的能力可能会受到影响 (relevant LLVM documentation page)。

如果我们采用“改善调试体验”的真正含义,这可以通过调整编译配置文件根据具体情况来完成。例如,实时程序开发(如视频游戏开发)中的常见要求是应用一些代码优化,以便 运行-time 性能可以忍受。请参阅 Rustc book on code-gen options 以了解在此端可以做的事情。每个 opt-level 都会以自己的方式为这种体验做出贡献。

另请参阅: