根据标题,这两者有什么区别?在何时应该考虑使用其中之一?
根据您对恐慌发生时会发生什么的定义(在 Cargo.toml
中定义),可能存在差异,也可能不存在差异。具体取决于您将其设置为 unwind
还是 abort
,不同的事情将会发生:
unwind
,这将(顾名思义)展开堆栈。 在特定情况下,可以获得完整的堆栈跟踪。abort
,您只能得到最后一个被调用者。另一方面,process::exit()
是一种“干净”的退出方式- 您将不会得到最后一个被调用者,并且将得到常规进程退出状态。
因此,您最好遵循以下原则:
exit()
。 请注意,已知错误被视为计划中的关闭。panic!()
,因为这样做既可以从中受益,以便在发生时获取堆栈跟踪,而且故障情况应该是非常罕见的,从而未被考虑并源于未经计划的情况。exit(101);
这样的东西在背后。exit(0)
应该意味着“一切正常”。