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



在C++中,您有编译标志来启用"优化调试体验",使用"-Og"或"/Og"(可能还有其他编译器上的其他标志(。

此标志支持非常基本的优化,不会干扰调试体验(据我所知(。但这确实意味着编译器为程序启用了微不足道或"免费"的优化,这样您就不必担心。

在GCC优化选项中,"优化调试体验"是:

优化调试体验。 -og 应为优化级别 标准编辑-编译-调试周期的选择,提供 合理的优化水平,同时保持快速编译 以及良好的调试体验。它是比 -O0 更好的选择 生成可调试的代码,因为某些编译器传递收集 调试信息在 -O0 处禁用。

我想知道是否有一个选项可以在某个地方实现同样的好处,或者是否计划任何这样的选项。理想情况下,可以通过货物并以尽可能跨平台的方式实现。

请注意,我不是在问相当于"-O1、-02 等"的"选择级别"。

在 Rust Cargo 关于配置文件的书中,您将看到默认的编译配置文件,名为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 提供了一些保证,但在调试模式下导航和处理属性的能力可能会受到影响(相关的 LLVM 文档页面(。

如果我们采用"改善调试体验"的真正含义,则可以通过调整编译配置文件来逐案完成。例如,在实时程序开发(如视频游戏开发(中,应用一些代码优化以使运行时性能可以承受,这是一个常见的要求。请参阅 Rustc 关于代码生成选项的书,看看在这方面可以做的事情。每个opt-level都将以自己的方式为这种经验作出贡献。

另请参阅:

  • 货物是否支持自定义配置文件?
  • 如何在使用 cargo 时获取包含调试信息的发布版本?

最新更新