26

我知道两者之间的区别。一件值得注意的事情是 abort() 发送 SIGABRT 信号,因此当您的软件依赖它们时它可能是相关的。但是对于典型的应用程序,exit() 似乎是 abort() 更安全的版本......?使用 abort() 而不是 exit() 是否还有其他问题?

4

4 回答 4

36

abort如果用户启用了核心转储,则使用将转储核心。因此,根据经验,abort如果您不确定出了什么问题,那么我会使用它,以致获得有用信息的唯一方法是分析核心转储。

如果您可以安全地exit从任何给定点开始,并且不需要核心转储,那么退出是一种更好的方法。

于 2010-09-09T11:56:09.037 回答
22

如果abort()您的程序可能处于损坏状态并且您认为尝试进一步执行任何操作太危险,请使用此选项。exit()将导致调用任何atexit函数,以及静态对象的 C++ 析构函数。这通常是您想要干净退出的原因,但如果他们用损坏的数据覆盖文件,则可能是灾难性的。

于 2010-09-09T12:01:46.277 回答
8

有时您的程序中断到其状态变得不一致并且因此exit()无法工作的程度,因为它会导致全局对象破坏并且当状态不一致时后者将无法正常运行。在这种情况下abort()是首选。

于 2010-09-09T11:53:46.943 回答
1

当应用程序无法处理异常并且无法理解要做什么时,首选 Abort。 exit()意味着应用程序必须优雅地完成所有任务。如果发生异常并且应用程序能够处理相同的情况,则会发生exit()调用。

于 2010-09-09T13:08:28.660 回答