rust - panic 和 process::exit 有什么区别

标签 rust

根据标题,这两者有什么区别,我什么时候应该考虑使用一个而不是另一个?

最佳答案

根据您对 panic 发生时所发生的事情的定义(在 Cargo.toml 中定义),可能会或可能不会有所不同。根据您将其设置为 unwind 还是 abort,会发生不同的事情:

  • 使用unwind,这将(顾名思义)展开堆栈。有了这个,特别是可以获得完整的堆栈跟踪
  • 使用abort,你只会得到最后一个被调用者

process::exit(),另一方面,是一个“干净”的退出——你不会得到最后一个被调用者,你会得到一个正常的进程退出状态。

因此,您最好遵守以下几点:

  • 对于计划关闭,使用 exit()。请注意,已知错误被视为计划关闭
  • 对于计划外的关闭(即异常故障),请考虑 panic!(),因为当发生这种情况时,你们双方都将从能够获得堆栈跟踪中获益,并且故障案例应该足够异常它实际上是下落不明的,并且源于计划外的情况

关于rust - panic 和 process::exit 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58362850/

相关文章:

windows - 在 windows 上执行 cargo run 时 rustc 消失

rust - 确保 actix 按时间顺序记录//预处理

syntax - 是否存在在类似结构之间移动字段的语法?

rust - 将柴油过滤器应用于单表还是连接表?

rust - 如何在既不 panic 也不不安全的情况下获得子切片?

rust - 如何使用 NetRc 解决不明确的关联类型

rust - 我如何从 Box<Any> 向下转换为特征对象类型?

rust - 引用和 Box<T> 在内存中的表示方式有什么区别?

rust - `T.into()` 有效但 `From::from(T)` 无效

string - 带有字符串附加的旧 Rust 代码会与 nightly 中断