有没有可能为特定的目标指定 `panic = "abort"`?

5
如果我像这样指定panic,它将适用于所有目标:
[profile.release]
panic = "abort"

我想仅为target=arm-linux-androideabi指定panic = "abort"

2个回答

6
您需要在项目中添加一个 .cargo/config 文件,并使用它来指定 panic 设置,而不是使用 Cargo.toml:
[target.arm-linux-androideabi]
rustflags = ["-C", "panic=abort"]

你需要查看的两个主要配置标题是[target.$triple][target.'cfg(...)']


0

还有另一种方法可以尝试实现这个目标:添加自定义的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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接