🔬This is a nightly-only experimental API. (
core_panic)Expand description
核心上的 panic 支持
核心库无法定义 panic,但可以声明 panic。 这意味着允许内核中的函数 panic,但要有用,上游 crate 必须定义内核使用的 panicing。 当前的 panic 接口是:
fn panic_impl(pi: &core::panic::PanicInfo<'_>) -> !此定义允许对任何常规消息进行 panic,但不允许 Box<Any> 值失败。
(PanicInfo 只包含一个 &(dyn Any + Send),为此我们在 PanicInfo::internal_constructor 中为其填充了一个虚拟值。) 这样做的原因是核心不允许分配。
该模块还包含其他一些紧急函数,但这只是编译器必需的 lang 项。所有 panics 都通过此函数进行了分配。
实际符号通过 #[panic_handler] 属性声明。
Functions
- const_panic_fmtExperimental在 const eval 中使用此函数代替 panic_fmt。
- panicExperimental不使用格式化时核心的panic!宏的底层实现。
- panic_displayExperimental
- panic_fmtExperimental带有格式化消息的 panic 的入口点。
- panic_nounwindExperimental像panic,但没有展开和 track_caller 以减少对代码大小的影响。
- panic_nounwind_fmtExperimental像panic_fmt,但用于非展开 panic。
- panic_strExperimental
- unreachable_displayExperimental