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

doc*_*doc 24 c c++ exit abort

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

And*_*mer 34

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

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

  • 我会改为:你希望你的用户分析核心转储吗?如果没有,请不要使用中止.(请记住,虽然您的开发人员可能需要核心转储,但您的用户可能不会.因此,中止应该仅用于可执行文件的"调试"版本.) (3认同)

Mik*_*our 20

使用abort(),如果你的程序是在可能已损坏状态,您认为这太危险了,试图做其他事情.exit()将导致任何atexit函数,并在静态对象的C++析构函数中被调用.这通常是干净退出所需要的,但如果它们覆盖了包含损坏数据的文件,则可能是灾难性的.

  • +1:但你也有其他方法可以做到这一点.如果没有调用注册为atexit的函数,你也可以_exit()而不是exit(),或者甚至发送一个SIGKILL给自己立即退出. (3认同)

sha*_*oth 8

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

  • @doc:是的,但这是一个相当极端的例子.一个更C++的例子:你已经处理了一个错误并且发生了另一个错误(与错误处理过程无关)并且重新输入了处理代码.这不是很好 - 错误发生得更快,你可以处理它们.所以你保持一个标志"我在里面处理这种错误".一旦代码被重新输入,你就扔掉了 - 调用`abort()`来立即终止程序. (2认同)