是否可以为特定目标指定 panic = "abort" ?

Is it possible to specify `panic = "abort"` for a specific target?

如果我这样指定 panic,它适用于所有目标:

[profile.release]
panic = "abort"

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

您需要将 .cargo/config 添加到您的项目并使用它来指定紧急设置而不是 Cargo.toml:

[target.arm-linux-androideabi]
rustflags = ["-C", "panic=abort"]

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

还有另一种方法可以尝试完成此操作:添加自定义恐慌处理程序,收集 stack-trace,解析 stack-trace 以确定恐慌发生在哪个库中,然后 如果您检测到它发生在该库中,则中止。

这是hacky/brittle吗?是的

但是如果出于某种原因你想要它,这个选项就在那里!

起点:

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