abort
Прерывает текущий процесс и возвращает код ошибки.
Примечание.
Не используйте этот метод для завершения работы приложения Microsoft Store или приложения универсальная платформа Windows (UWP), за исключением сценариев тестирования или отладки. Программные или пользовательские способы закрытия приложения Магазина запрещены в соответствии с политиками Microsoft Store. Дополнительные сведения см. в разделе жизненного цикла приложений UWP.
Синтаксис
void abort( void );
Возвращаемое значение
abort
не возвращает контроль в вызывающий процесс. По умолчанию он проверяет наличие обработчика прерывания сигнала и вызывает SIGABRT
, если он задан. Затем abort
завершает текущий процесс и возвращает код выхода для родительского процесса.
Замечания
Блок, относящийся только к системам Майкрософт
По умолчанию при сборке приложения с использованием отладочной библиотеки среды выполнения подпрограмма abort
выдает сообщение об ошибке, прежде чем появляется SIGABRT
. Для консольных приложений, работающих в режиме консоли, отправляется сообщение в STDERR
. Классические приложения Windows и консольные приложения, запускаемые в окнах, отображают сообщение в окне сообщений. Чтобы отключить сообщение, используйте _set_abort_behavior
для очистки флага _WRITE_ABORT_MSG
. Отображаемое сообщение зависит от версии используемой среды выполнения. Для приложений, созданных с помощью последних версий Visual C++, сообщение напоминает следующее:
R6010 — abort() был вызван
В предыдущих версиях библиотеки среды выполнения C отображается следующее сообщение:
Это приложение запросило завершение среды выполнения необычным способом. За дополнительной информацией обращайтесь в службу поддержки приложения.
При компиляции программы в режиме отладки в окне сообщения отображаются параметры Прервать, Повторить или Пропустить. Если пользователь выбирает параметр Прервать, программа немедленно завершается и возвращает код выхода 3. Если пользователь выбирает параметр Повторить, вызывается отладчик (если он доступен) для JIT-отладки. Если пользователь выбирает параметр Пропустить, abort
продолжает работу в обычном режиме.
Затем и в окончательной, и в отладочной сборке abort
проверяет, задает ли обработчик прерывания сигнала. Если задан обработчик сигнала, не используемый по умолчанию, abort
вызывает raise(SIGABRT)
. Используйте функцию signal
для связывания функции обработчика сигнала прерывания с сигналом SIGABRT
. Вы можете выполнить пользовательские действия — например, освободить ресурсы или записать данные сведений — и завершить работу приложения с кодом ошибки в функции обработчика. Если пользовательский обработчик сигнала не определен, abort
не вызывает SIGABRT
сигнал.
По умолчанию в сборках классических или консольных приложений abort
не отладка вызывает механизм службы отчеты об ошибках Windows (ранее известный как доктор Уотсон), чтобы сообщить о сбоях корпорации Майкрософт. Это поведение можно включить или отключить, вызвав _set_abort_behavior
и задав или замаскировав флаг _CALL_REPORTFAULT
. При установке флага в Windows отображается поле сообщения с текстом, например "Проблема, из-за чего программа перестанет работать правильно". Пользователь может вызвать отладчик с кнопкой отладки или кнопку "Закрыть программу ", чтобы завершить работу приложения с кодом ошибки, определенным операционной системой.
Если обработчик отчетов об ошибках Windows не вызывается, abort
вызовы _exit
для завершения процесса с кодом выхода 3 и возвращают управление родительскому процессу или операционной системе. _exit
не очищает буферы потоков или не выполняет atexit
/_onexit
обработку.
По соображениям abort
совместимости Windows при вызовах _exit
он может вызвать API Windows ExitProcess
, который, в свою очередь, позволяет выполнять подпрограммы завершения БИБЛИОТЕК DLL. Деструкторы не выполняются в исполняемом файле, но то же самое может быть не верно для библиотек DLL, загруженных в пространство процесса исполняемого файла. Это поведение не соответствует стандарту C++ . Чтобы немедленно завершить процесс, включая библиотеки DLL, используйте API Windows TerminateProcess
. Вы также можете зарегистрировать обработчик сигнала прерывания, вызывающий TerminateProcess
для стандартного поведения. Поведение, соответствующее требованиям, может оказаться в некоторых затратах на совместимость Windows.
Дополнительные сведения об отладке CRT см. в статьях о методах отладки CRT.
End Microsoft Specific
По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить его, ознакомьтесь с глобальным состоянием в CRT.
Требования
Маршрут | Обязательный заголовок |
---|---|
abort |
<process.h> или <stdlib.h> |
Пример
Следующая программа пытается открыть файл и прерывается, если попытка завершается неудачей.
// crt_abort.c
// compile with: /TC
// This program demonstrates the use of
// the abort function by attempting to open a file
// and aborts if the attempt fails.
#include <stdio.h>
#include <stdlib.h>
int main( void )
{
FILE *stream = NULL;
errno_t err = 0;
err = fopen_s(&stream, "NOSUCHF.ILE", "r" );
if ((err != 0) || (stream == NULL))
{
perror( "File could not be opened" );
abort();
}
else
{
fclose( stream );
}
}
File could not be opened: No such file or directory
См. также
Использование abort
Функция abort
Управление процессами и средой
_exec
, _wexec
функции
exit
, , _Exit
_exit
raise
signal
_spawn
, _wspawn
функции
_DEBUG
_set_abort_behavior