Debugging 如何在Rust中使用cfg检查发布/调试构建?

Debugging 如何在Rust中使用cfg检查发布/调试构建?,debugging,rust,preprocessor,rust-cargo,Debugging,Rust,Preprocessor,Rust Cargo,使用C预处理器时,通常会这样做 #if defined(NDEBUG) // release build #endif #if defined(DEBUG) // debug build #endif Cargo的粗略等价物为: 货物构建-发布发布 货物构建用于调试 Rust的#[cfg(…)]属性或cfg!(…)宏是否可用于执行类似操作 我知道Rust的预处理器不像C的那样工作。我检查了文件和文件。(假设此列表是全面的) debug\u断言可以检查,但用于检查更一般的调

使用C预处理器时,通常会这样做

#if defined(NDEBUG)
    // release build
#endif

#if defined(DEBUG)
    // debug build
#endif
Cargo的粗略等价物为:

  • 货物构建-发布
    发布
  • 货物构建
    用于调试
Rust的
#[cfg(…)]
属性或
cfg!(…)
宏是否可用于执行类似操作

我知道Rust的预处理器不像C的那样工作。我检查了文件和文件。(假设此列表是全面的)

debug\u断言可以检查,但用于检查更一般的调试案例时可能会产生误导

我不确定这个问题是否与货物有关。

您可以使用它作为适当的配置标志。它同时适用于属性和宏:

此配置标志被命名为在中执行此操作的正确方法。目前没有更合适的内置条件

从:

debug\u断言
-编译时默认启用 优化。这可用于在中启用额外的调试代码 发展而不是生产。例如,它控制 标准库的
debug\u断言的行为


另一种稍微复杂一点的方法是使用
#[cfg(feature=“debug”)]
并创建一个构建脚本,为您的板条箱启用“debug”功能,如图所示。

@Shepmaster这与类似。只是为了记录,这在构建脚本中不起作用。如果是
#[cfg(debug_断言)]
而不是
#[cfg(debug_断言)]{…}
,那么会出现
错误[E0658]:表达式上的属性是实验性的
错误:在这个位置不支持删除表达式
。锈1.42.0
#[cfg(debug_assertions)]
fn example() {
    println!("Debugging enabled");
}

#[cfg(not(debug_assertions))]
fn example() {
    println!("Debugging disabled");
}

fn main() {
    if cfg!(debug_assertions) {
        println!("Debugging enabled");
    } else {
        println!("Debugging disabled");
    }

    #[cfg(debug_assertions)]
    println!("Debugging enabled");

    #[cfg(not(debug_assertions))]
    println!("Debugging disabled");

    example();
}