abort

Interrompt le processus actuel et retourne un code d’erreur.

Remarque

N’utilisez pas cette méthode pour arrêter une application Microsoft Store ou une application plateforme Windows universelle (UWP), sauf dans les scénarios de test ou de débogage. Les méthodes programmatiques ou d’interface utilisateur pour fermer une application Store ne sont pas autorisées en fonction des stratégies du Microsoft Store. Pour plus d’informations, consultez le cycle de vie des applications UWP.

Syntaxe

void abort( void );

Valeur retournée

abort ne retourne pas le contrôle au processus appelant. Par défaut, elle recherche un gestionnaire de signal d’abandon et déclenche SIGABRT si tel gestionnaire est défini. Ensuite, abort termine le processus actuel et retourne un code de sortie au processus parent.

Notes

Section spécifique à Microsoft

Par défaut, quand une application est générée avec la bibliothèque runtime de débogage, la routine abort affiche un message d’erreur avant que SIGABRT ne soit déclenché. Pour les applications de console en cours d’exécution en mode console, le message est envoyé à STDERR. Les applications de bureau Windows et les applications de console qui s’exécutent en mode fenêtré affichent le message dans une boîte de message. Pour supprimer le message, utilisez cette option _set_abort_behavior pour effacer l’indicateur _WRITE_ABORT_MSG . Le message affiché dépend de la version de l’environnement d’exécution utilisé. Pour les applications créées à l’aide des versions les plus récentes de Visual C++, le message ressemble à celui-ci :

R6010 - abandon() a été appelé

Dans les versions précédentes de la bibliothèque runtime C, le message suivant était affiché :

This application has requested the Runtime to terminate it in an unusual way. Please contact the application’s support team for more information.

Quand le programme est compilé en mode débogage, la boîte de message affiche les options Abandonner, Réessayer ou Ignorer. Si l’utilisateur choisit Abandonner, le programme se termine immédiatement et retourne le code de sortie 3. Si l’utilisateur choisit Réessayer, un débogueur est appelé pour le débogage juste-à-temps, si disponible. Si l’utilisateur choisit Ignorer, abort continue le traitement normal.

Dans les versions de détail et de débogage, abort vérifie ensuite si un gestionnaire de signal d’abandon est défini. Si un gestionnaire de signal personnalisé est défini, abort appelle raise(SIGABRT). Utilisez la signal fonction pour associer une fonction de gestionnaire de signal d’abandon au SIGABRT signal. Vous pouvez effectuer des actions personnalisées, telles que nettoyer les ressources ou enregistrer des informations, et arrêter l’application avec votre propre code d’erreur dans la fonction de gestionnaire. Si aucun gestionnaire de signal personnalisé n’est défini, abort ne déclenche pas le SIGABRT signal.

Par défaut, dans les builds non débogueurs d’applications de bureau ou de console, abort appelle le mécanisme windows Error Reporting Service (anciennement Dr Watson) pour signaler des échecs à Microsoft. Vous pouvez activer ou désactiver ce comportement en appelant _set_abort_behavior et en définissant ou masquant l’indicateur _CALL_REPORTFAULT. Lorsque l’indicateur est défini, Windows affiche une zone de message contenant du texte semblable à « Un problème a provoqué l’arrêt du programme de fonctionner correctement ». L’utilisateur peut choisir d’appeler un débogueur avec un bouton Debug ou de choisir le bouton Fermer le programme pour arrêter l’application avec un code d’erreur défini par le système d’exploitation.

Si le gestionnaire de rapports d’erreurs Windows n’est pas appelé, abort les appels _exit pour arrêter le processus avec le code de sortie 3 et retourne le contrôle au processus parent ou au système d’exploitation. _exit ne vide pas les mémoires tampons de flux ou ne traite atexit/_onexit pas.

Pour des raisons de compatibilité Windows, lorsque des abort appels _exit, il peut appeler l’API Windows ExitProcess , ce qui permet à son tour aux routines d’arrêt DLL de s’exécuter. Les destructeurs ne sont pas exécutés dans l’exécutable, mais la même chose peut ne pas être vraie des DLL chargées dans l’espace de processus de l’exécutable. Ce comportement n’est pas strictement conforme à la norme C++. Pour terminer immédiatement un processus, y compris les DLL, utilisez l’API Windows TerminateProcess . Vous pouvez également inscrire un gestionnaire de signal d’abandon qui appelle un TerminateProcess comportement conforme aux normes. Le comportement conforme peut entraîner un certain coût dans la compatibilité de Windows.

Pour plus d’informations sur le débogage CRT, consultez les techniques de débogage CRT.

End Microsoft Specific

Par défaut, l’état global de cette fonction est limité à l’application. Pour le modifier, consultez l’état global dans le CRT.

Spécifications

Routine En-tête requis
abort <process.h> ou <stdlib.h>

Exemple

Le programme suivant essaie d’ouvrir un fichier et s’interrompt si la tentative échoue.

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

Voir aussi

Utilisant abort
Fonction abort
Processus et contrôle d’environnement
_exec, _wexec fonctions
exit, _Exit, _exit
raise
signal
_spawn, _wspawn fonctions
_DEBUG
_set_abort_behavior