Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

Ответ 3

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

Ответ 4

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