abort

Przerywa bieżący proces i zwraca kod błędu.

Uwaga

Nie należy używać tej metody do zamykania aplikacji ze sklepu Microsoft Store ani aplikacji platforma uniwersalna systemu Windows (UWP), z wyjątkiem scenariuszy testowania lub debugowania. Programowe lub interfejsu użytkownika sposoby zamykania aplikacji ze Sklepu nie są dozwolone zgodnie z zasadami sklepu Microsoft Store. Aby uzyskać więcej informacji, zobacz Cykl życia aplikacji platformy UNIWERSALNEJ systemu Windows.

Składnia

void abort( void );

Wartość zwracana

abort nie zwraca kontroli do procesu wywołującego. Domyślnie sprawdza program obsługi sygnału przerwania i zgłasza SIGABRT , jeśli został ustawiony. Następnie abort kończy bieżący proces i zwraca kod zakończenia do procesu nadrzędnego.

Uwagi

Specyficzne dla firmy Microsoft

Domyślnie gdy aplikacja jest kompilowana przy użyciu biblioteki środowiska uruchomieniowego debugowania, abort procedury wyświetlają komunikat o błędzie przed SIGABRT wystąpieniem. W przypadku aplikacji konsoli działających w trybie konsoli komunikat jest wysyłany do .STDERR Aplikacje klasyczne systemu Windows i aplikacje konsolowe uruchomione w trybie okna wyświetlają komunikat w oknie komunikatu. Aby pominąć komunikat, użyj polecenia _set_abort_behavior , aby wyczyścić flagę _WRITE_ABORT_MSG . Wyświetlany komunikat zależy od używanej wersji środowiska uruchomieniowego. W przypadku aplikacji utworzonych przy użyciu najnowszych wersji programu Visual C++komunikat przypomina następujący:

R6010 — abort() został wywołany

W poprzednich wersjach biblioteki środowiska uruchomieniowego języka C ten komunikat został wyświetlony:

Ta aplikacja zażądała, aby środowisko uruchomieniowe zakończyło je w nietypowy sposób. Aby uzyskać więcej informacji, skontaktuj się z zespołem pomocy technicznej aplikacji.

Gdy program jest kompilowany w trybie debugowania, w oknie komunikatu są wyświetlane opcje Przerwanie, Ponów próbę lub Ignoruj. Jeśli użytkownik wybierze opcję Przerwanie, program zostanie natychmiast zakończony i zwróci kod zakończenia 3. Jeśli użytkownik wybierze opcję Ponów próbę, debuger jest wywoływany na potrzeby debugowania just in time, jeśli jest dostępny. Jeśli użytkownik wybierze opcję Ignoruj, abort kontynuuje normalne przetwarzanie.

W kompilacjach handlu detalicznego i debugowania sprawdza, abort czy ustawiono program obsługi sygnału przerwania. Jeśli jest ustawiona procedura obsługi sygnału innego niż domyślna, abort wywołuje metodę raise(SIGABRT). signal Użyj funkcji , aby skojarzyć funkcję obsługi sygnału przerwania z sygnałemSIGABRT. Możesz wykonywać akcje niestandardowe — na przykład wyczyścić zasoby lub informacje dziennika — i zakończyć aplikację własnym kodem błędu w funkcji obsługi. Jeśli nie zdefiniowano niestandardowej procedury obsługi sygnałów, abort nie zgłasza sygnału SIGABRT .

Domyślnie w kompilacjach nie debugowania aplikacji abort klasycznych lub konsolowych wywołuje mechanizm usługi Raportowanie błędów systemu Windows (wcześniej znany jako dr Watson), aby zgłosić błędy firmie Microsoft. To zachowanie można włączyć lub wyłączyć, wywołując _set_abort_behavior i ustawiając lub maskując flagę _CALL_REPORTFAULT . Po ustawieniu flagi system Windows wyświetla pole komunikatu zawierające tekst podobny do "Problem spowodował, że program przestał działać poprawnie". Użytkownik może wybrać wywołanie debugera za pomocą przycisku Debuguj lub wybrać przycisk Zamknij program , aby zakończyć aplikację kodem błędu zdefiniowanym przez system operacyjny.

Jeśli program obsługi raportowania błędów systemu Windows nie jest wywoływany, abort wywołania _exit w celu zakończenia procesu za pomocą kodu zakończenia 3 i zwracają kontrolę do procesu nadrzędnego lub systemu operacyjnego. _exit nie opróżnia buforów strumienia ani atexit/_onexit nie przetwarza.

Ze względu na zgodność systemu Windows, gdy abort wywołuje _exitmetodę , może wywołać interfejs API systemu Windows ExitProcess , co z kolei umożliwia uruchamianie procedur kończenia żądań bibliotek DLL. Destruktory nie są uruchamiane w pliku wykonywalnym, ale te same mogą nie być prawdziwe w bibliotekach DLL załadowanych w przestrzeni procesowej pliku wykonywalnego. To zachowanie nie jest ściśle zgodne ze standardem C++. Aby natychmiast zakończyć proces wraz z dowolnymi bibliotekami DLL, użyj interfejsu API systemu Windows TerminateProcess . Można również zarejestrować program obsługi sygnałów przerwania, który wywołuje TerminateProcess zachowanie zgodne ze standardami. Zgodne zachowanie może być kosztowne w przypadku zgodności systemu Windows.

Aby uzyskać więcej informacji na temat debugowania CRT, zobacz Techniki debugowania CRT.

Koniec specyficzny dla firmy Microsoft

Domyślnie stan globalny tej funkcji jest zakresem aplikacji. Aby go zmienić, zobacz Stan globalny w CRT.

Wymagania

Procedura Wymagany nagłówek
abort <process.h> lub <stdlib.h>

Przykład

Poniższy program próbuje otworzyć plik i przerwać, jeśli próba nie powiedzie się.

// 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

Zobacz też

Za pomocą abort
Funkcja abort
Kontrola procesu i środowiska
_exec, _wexec funkcje
exit, _Exit, _exit
raise
signal
_spawn, _wspawn funkcje
_DEBUG
_set_abort_behavior