Struct core::panic::PanicInfo

1.10.0 · source ·
pub struct PanicInfo<'a> { /* private fields */ }
Expand description

提供有关 panic 的信息的结构体。

PanicInfo 结构体被传递给由 set_hook 函数设置的 panic 钩子。

Examples

use std::panic;

panic::set_hook(Box::new(|panic_info| {
    println!("panic occurred: {panic_info}");
}));

panic!("critical system failure");
Run

Implementations§

source§

impl<'a> PanicInfo<'a>

source

pub fn payload(&self) -> &(dyn Any + Send)

返回与 panic 关联的有效载荷。

通常但并非总是 &'static strString

Examples
use std::panic;

panic::set_hook(Box::new(|panic_info| {
    if let Some(s) = panic_info.payload().downcast_ref::<&str>() {
        println!("panic occurred: {s:?}");
    } else {
        println!("panic occurred");
    }
}));

panic!("Normal panic");
Run
source

pub fn message(&self) -> Option<&Arguments<'_>>

🔬This is a nightly-only experimental API. (panic_info_message #66745)

如果 core crate 中的 panic! 宏 (不是 std 中的) 与格式化字符串和一些其他参数一起使用,则返回该消息准备好与 fmt::write 一起使用

source

pub fn location(&self) -> Option<&Location<'_>>

返回有关 panic 起源的位置的信息 (如果有)。

该方法当前将始终返回 Some,但是在 future 版本中可能会更改。

Examples
use std::panic;

panic::set_hook(Box::new(|panic_info| {
    if let Some(location) = panic_info.location() {
        println!("panic occurred in file '{}' at line {}",
            location.file(),
            location.line(),
        );
    } else {
        println!("panic occurred but can't get location information...");
    }
}));

panic!("Normal panic");
Run
source

pub fn can_unwind(&self) -> bool

🔬This is a nightly-only experimental API. (panic_can_unwind #92988)

返回是否允许 panic 处理程序从发生 panic 的点展开栈。

对于大多数类型的 panic 来说都是如此,除了试图从 Drop 实现或 ABI 不支持的函数展开引起的 panic 外。

即使此函数返回 false,panic 处理程序也可以安全地展开,但这只会导致再次调用 panic 处理程序。

Trait Implementations§

source§

impl<'a> Debug for PanicInfo<'a>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

使用给定的格式化程序格式化该值。 Read more
1.26.0 · source§

impl Display for PanicInfo<'_>

source§

fn fmt(&self, formatter: &mut Formatter<'_>) -> Result

使用给定的格式化程序格式化该值。 Read more

Auto Trait Implementations§

§

impl<'a> !RefUnwindSafe for PanicInfo<'a>

§

impl<'a> !Send for PanicInfo<'a>

§

impl<'a> !Sync for PanicInfo<'a>

§

impl<'a> Unpin for PanicInfo<'a>

§

impl<'a> !UnwindSafe for PanicInfo<'a>

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

获取 selfTypeIdRead more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

从拥有的值中一成不变地借用。 Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

从拥有的值中借用。 Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

返回未更改的参数。

source§

impl<T, U> Into<U> for Twhere U: From<T>,

source§

fn into(self) -> U

调用 U::from(self)

也就是说,这种转换是 From<T> for U 实现选择执行的任何操作。

source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

发生转换错误时返回的类型。
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

执行转换。
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

发生转换错误时返回的类型。
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

执行转换。