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