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

标签 rust rust-cargo

在 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/

相关文章:

rust - 我可以从 &[u32] 中过滤出特定的数字并将其转换为 Vec<u32> 吗?

winapi - Rust 编译期间的链接错误(Cargo)

rust - 是否有将 Cargo 更新到最新官方版本的命令?

rust - Rustup未被认可,但很粗糙-版本有效

rust - 如何返回使用局部声明变量的结构实例

rust - 尝试在 rust api上实现rocket_cors CorsOptions

rust - 让 child 修改其 parent

asynchronous - 我将如何在 future 流中为每个项目发出 TcpClient 请求?

rust - Rust 中有队列和堆栈集合吗?

windows - 在 windows 上执行 cargo run 时 rustc 消失