abort

Interrompe il processo corrente e restituisce un codice di errore.

Nota

Non usare questo metodo per arrestare un'app di Microsoft Store o piattaforma UWP (Universal Windows Platform) (UWP), ad eccezione di scenari di test o debug. I modi programmatici o dell'interfaccia utente per chiudere un'app dello Store non sono consentiti in base ai criteri di Microsoft Store. Per altre informazioni, vedi Ciclo di vita delle app UWP.

Sintassi

void abort( void );

Valore restituito

abort non restituisce il controllo al processo chiamante. Per impostazione predefinita, cerca un gestore di segnale di interruzione e genera SIGABRT se ne è stato impostato uno. Quindi abort termina il processo corrente e restituisce un codice di uscita al processo padre.

Osservazioni:

Sezione specifica Microsoft

Per impostazione predefinita, quando un'app viene compilata con la libreria di runtime di debug, la routine abort visualizza un messaggio di errore prima che venga generato SIGABRT. Per le app della console eseguite in modalità console, il messaggio viene inviato a STDERR. Le app desktop e le app console di Windows eseguite in modalità finestra visualizzano il messaggio in una finestra di messaggio. Per eliminare il messaggio, usare _set_abort_behavior per cancellare il _WRITE_ABORT_MSG flag. Il messaggio visualizzato varia a seconda della versione dell'ambiente di runtime usato. Per le applicazioni compilate usando le versioni più recenti di Visual C++, il messaggio è simile al seguente:

R6010 - abort() è stato chiamato

Nelle versioni precedenti della libreria di runtime C, veniva visualizzato il messaggio seguente:

Questa applicazione ha richiesto al Runtime di terminarlo in modo anomalo. Per altre informazioni, contattare il team di supporto dell'applicazione.

Quando il programma viene compilato in modalità debug, la finestra di messaggio visualizza le opzioni Interrompi, Riprova o Ignora. Se l'utente sceglie Interrompi, il programma viene immediatamente terminato e viene restituito un codice di uscita 3. Se l'utente sceglie Riprova, viene richiamato un debugger per il debug JIT, se disponibile. Se l'utente sceglie Ignora, abort continua l'elaborazione normale.

Nelle build di distribuzione e di debug, abort verifica quindi se è stato impostato un gestore di segnale di interruzione. Se è impostato un gestore di segnale non predefinito, abort chiama raise(SIGABRT). Usare la signal funzione per associare una funzione del gestore del segnale di interruzione al SIGABRT segnale. È possibile eseguire azioni personalizzate, ad esempio pulire le risorse o le informazioni di registro, e terminare l'app con il proprio codice di errore nella funzione del gestore. Se non è definito alcun gestore di segnale personalizzato, abort non genera il SIGABRT segnale.

Per impostazione predefinita, nelle build non di debug delle app desktop o console, abort richiama il meccanismo del servizio Segnalazione errori Windows (in precedenza noto come Dr. Watson) per segnalare gli errori a Microsoft. Questo comportamento può essere abilitato o disabilitato chiamando _set_abort_behavior e impostando o eseguendo il mascheramento del flag _CALL_REPORTFAULT. Quando il flag è impostato, Windows visualizza una finestra di messaggio con testo simile a "Un problema ha causato il corretto funzionamento del programma". L'utente può scegliere di richiamare un debugger con un pulsante Debug oppure scegliere il pulsante Chiudi programma per terminare l'app con un codice di errore definito dal sistema operativo.

Se il gestore segnalazione errori Windows non viene richiamato, abort chiama _exit per terminare il processo con codice di uscita 3 e restituisce il controllo al processo padre o al sistema operativo. _exit non scarica i buffer di flusso o esegue atexit/_onexit l'elaborazione.

Per motivi di compatibilità di Windows, quando abort chiama _exit, può richiamare l'API Windows ExitProcess , che a sua volta consente l'esecuzione di routine di terminazione DLL. I distruttori non vengono eseguiti nel file eseguibile, ma lo stesso potrebbe non essere vero delle DLL caricate nello spazio di elaborazione dell'eseguibile. Questo comportamento non è strettamente conforme allo standard C++. Per terminare immediatamente un processo che include tutte le DLL, usare l'API di Windows TerminateProcess . È anche possibile registrare un gestore del segnale di interruzione che richiama per il TerminateProcess comportamento conforme allo standard. Il comportamento conforme può comportare un certo costo per la compatibilità di Windows.

Per altre informazioni sul debug CRT, vedere Tecniche di debug CRT.

End Microsoft Specific

Per impostazione predefinita, lo stato globale di questa funzione è limitato all'applicazione. Per modificarlo, vedere Stato globale in CRT.

Requisiti

Ciclo Intestazione obbligatoria
abort <process.h> oppure <stdlib.h>

Esempio

Il programma seguente tenta di aprire un file e viene interrotto se il tentativo non riesce.

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

Vedi anche

Utilizzando abort
Funzione abort
Processo e controllo dell'ambiente
_exec, _wexec funzioni
exit, _Exit, _exit
raise
signal
_spawn, _wspawn funzioni
_DEBUG
_set_abort_behavior