恐慌和process::exit之间有什么区别?

3
根据标题,这两者有什么区别?在何时应该考虑使用其中之一?
2个回答

5

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

  • 使用 unwind,这将(顾名思义)展开堆栈。 在特定情况下,可以获得完整的堆栈跟踪。
  • 使用 abort,您只能得到最后一个被调用者。

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

因此,您最好遵循以下原则:

  • 对于计划中的关闭,请使用 exit()。 请注意,已知错误被视为计划中的关闭。
  • 对于未经计划的关闭(即异常故障),请考虑使用 panic!(),因为这样做既可以从中受益,以便在发生时获取堆栈跟踪,而且故障情况应该是非常罕见的,从而未被考虑并源于未经计划的情况。

2
据我所知,在发布的程序中,恐慌(panic)永远不应该发生。它提供了开发人员需要的信息,但对用户来说并不友好。我建议“将其用于在生产环境中不应该发生的错误”。可能有像exit(101);这样的东西在背后。
退出(exit)只是以你给出的代码终止进程。exit(0)应该意味着“一切正常”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接