如果我像这样指定
panic
,它将适用于所有目标:[profile.release]
panic = "abort"
我想仅为target=arm-linux-androideabi
指定panic = "abort"
。
panic
,它将适用于所有目标:[profile.release]
panic = "abort"
我想仅为target=arm-linux-androideabi
指定panic = "abort"
。
.cargo/config
文件,并使用它来指定 panic 设置,而不是使用 Cargo.toml:[target.arm-linux-androideabi]
rustflags = ["-C", "panic=abort"]
你需要查看的两个主要配置标题是[target.$triple]
和[target.'cfg(...)']
。
还有另一种方法可以尝试实现这个目标:添加自定义的panic处理程序,收集堆栈跟踪,解析堆栈跟踪以确定panic发生在哪个库中,然后仅在检测到它发生在该库内时才中止。
这种方法是否靠谱/脆弱?是的。
但如果出于某种原因您想要这样做,那么这个选项是可行的!
起点:
panic::set_hook(Box::new(|info| {
//let stacktrace = Backtrace::capture();
let stacktrace = Backtrace::force_capture();
println!("Got panic. @info:{}\n@stackTrace:{}", info, stacktrace);
if guess_library_from_stacktrace(stacktrace) == "library-X" {
std::process::abort();
}
}));
这里有一个GitHub评论,其中包含更多细节:https://github.com/tokio-rs/tokio/issues/2002#issuecomment-1020443386