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 strumienia ani atexit
/_onexit
nie przetwarza.
Ze względu na zgodność systemu Windows, gdy abort
wywołuje _exit
metodę , 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