恐慌和进程::退出有什么区别

  • 本文关键字:区别 退出 进程 rust
  • 更新时间 :
  • 英文 :


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

可能会有也可能没有区别,具体取决于您对发生恐慌时发生的事情的定义(在Cargo.toml中定义(。根据您是将其设置为unwind还是abort,将发生不同的事情:

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

另一方面,process::exit()是一个"干净"的退出 - 您不会获得最后一个被调用者,并且您将获得常规流程退出状态。

因此,理想情况下,您需要遵守以下几点:

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

Afaik,恐慌永远不应该发生在已发布的程序中。它为开发人员提供信息,但不是任何用户友好的信息。我会说"将其用于生产中不应该发生的错误"。背后可能有类似exit(101);

exit 只是使用您提供给它的代码终止您的进程。exit(0)应该意味着"一切都很好"。

最新更新