当abort()比exit()更受欢迎时?

时间:2010-09-09 11:48:50

标签: c++ c exit abort

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

4 个答案:

答案 0 :(得分:33)

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

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

答案 1 :(得分:20)

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

答案 2 :(得分:8)

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

答案 3 :(得分:1)

当应用程序无法处理异常并且无法理解要执行的操作时,Abort会被优先使用。 Exit()意味着应用程序必须优雅地完成所有任务。如果发生异常且应用程序能够处理相同的事件,则会发生Exit()调用。