gpt4 book ai didi

rust - 用于 --release 的 panic!() 和 expect() 的替代方法?

转载 作者:行者123 更新时间:2023-12-03 11:24:44 24 4
gpt4 key购买 nike

在开发中,我的代码使用 .expect()panic!()处理 fatal error 。
他们的行为正是我在开发过程中所需要的。
当我用 --release 编译时,我希望他们的输出会变得更加简洁。
即此代码:

let mut file_a = OpenOptions::new().write(true)
.read(true)
.open(args.file_a).expect("foo bar");
产生:
thread 'main' panicked at 'foo bar: Os { code: 2, kind: NotFound, message: "No such file or directory" }', src/bin/vsapply.rs:131:59
当我更喜欢:
foo bar: No such file or directory
使用 --release 编译时.
有没有办法做到这一点?

最佳答案

std::panic::set_hook的组合和 #[cfg(debug_assertions)]解决问题。

use std::panic;

fn main() {
#[cfg(not(debug_assertions))]
panic::set_hook(Box::new(|panic_info| {
if let Some(s) = panic_info.payload().downcast_ref::<&str>() {
println!("panic occurred: {:?}", s);
} else {
println!("panic occurred");
}
}));
println!("Hello, world!");
panic!("nyaan");
}
当执行 cargo run ,输出为:
Hello, world!
thread 'main' panicked at 'nyaan', src\main.rs:14:5
cargo run --release :
Hello, world!
panic occurred: "nyaan"

关于rust - 用于 --release 的 panic!() 和 expect() 的替代方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65262371/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com