Debugging 如何在Rust中使用cfg检查发布/调试构建?
使用C预处理器时,通常会这样做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断言可以检查,但用于检查更一般的调
#if defined(NDEBUG)
// release build
#endif
#if defined(DEBUG)
// debug build
#endif
Cargo的粗略等价物为:
发布货物构建-发布
用于调试货物构建
#[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();
}