是否可以为特定目标指定 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
如果我这样指定 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