Когда abort () предпочтительнее exit ()?

Я знаю разницу между этими двумя. Примечательно, что abort() отправляет сигнал SIGABRT, поэтому он может быть актуальным, когда ваше программное обеспечение полагается на них. Но для типичного приложения exit () кажется более безопасной версией abort ()...? Существуют ли какие-либо другие проблемы для использования abort() вместо exit()?

4 ответов


используя abort будет сбрасывать ядро, если у пользователя включены дампы ядра. Так что, как правило, я бы использовал abort Если вы так не уверены в том, что пошло не так, что единственный способ получить полезную информацию об этом-анализ дампа ядра.

Если вы можете безопасно exit из любой заданной точки и не нужен дамп ядра, тогда выход-более приятный подход.


использовать abort() Если ваша программа находится в возможно коррумпированном состоянии, и вы считаете слишком опасным пытаться сделать что-либо дальше. exit() вызовет каких-либо atexit функции и в C++ деструкторы статических объектов, которые будут вызываться. Это обычно то, что вы хотите для чистого выхода, но это может быть катастрофическим, если, например, они перезапишут файл с поврежденными данными.


Иногда ваша программа ломается до такой степени, что ее состояние становится непоследовательным и так exit() не будет работать, потому что это приведет к уничтожению глобальных объектов, и последний не будет функционировать должным образом, когда состояние несовместимо. В таких ситуациях .


Abort предлагается, когда приложение не в состоянии обрабатывать исключение и не в состоянии понять, что делать сценарий. Exit () означает, что приложение должно завершить все задачи изящно. если возникает исключение и приложение может обрабатывать то же самое, то происходит вызов Exit ().