恐慌和 process::exit 有什么区别

jam*_*son 3 rust

根据标题,这两者之间有什么区别,我什么时候应该考虑使用其中一种?

Séb*_*uld 5

可能有也可能没有差异,具体取决于您对发生恐慌时发生的情况的定义(在 中定义Cargo.toml)。根据您是否将其设置为unwindabort,会发生不同的情况:

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

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

因此,您最好遵守以下规定:

  • 对于计划停机,请使用exit(). 请注意,已知错误被视为计划关闭
  • 对于计划外关闭(即异常故障),请考虑panic!(),因为发生这种情况时,您都可以从获得堆栈跟踪中受益,并且故障情况应该足够异常,以至于它实际上未被解释并且源于计划外场景