abort

Anula el proceso actual y devuelve un código de error.

Nota:

No use este método para cerrar una aplicación para Microsoft Store ni una aplicación para la Plataforma universal de Windows (UWP), excepto en escenarios de pruebas o depuración. Las formas de cerrar una aplicación de Store mediante programación o con la interfaz de usuario no están permitidas según las Directivas de Microsoft Store. Para obtener más información, consulte Ciclo de vida de la aplicación para UWP.

Sintaxis

void abort( void );

Valor devuelto

abort no devuelve el control al proceso de llamada. De forma predeterminada, busca un controlador de señales de anulación y genera SIGABRT si se ha establecido uno. Luego, abort finaliza el proceso actual y devuelve un código de salida al proceso primario.

Comentarios

Específicos de Microsoft

De forma predeterminada, cuando se compila una aplicación con la biblioteca de depuración en tiempo de ejecución, la rutina abort muestra un mensaje de error antes de generar SIGABRT. En el caso de aplicaciones de consola que se ejecuten en modo de consola, el mensaje se envía a STDERR. Las aplicaciones de escritorio de Windows y las aplicaciones de consola que se ejecutan en modo de ventana muestran el mensaje en un cuadro de mensaje. Para suprimir el mensaje, use _set_abort_behavior para borrar la marca _WRITE_ABORT_MSG. El mensaje que aparece depende de la versión del entorno en tiempo de ejecución que se use. Para las aplicaciones compiladas con las versiones más recientes de Visual C++, el mensaje es similar al siguiente:

R6010: Se ha llamado a abort()

En versiones anteriores de la biblioteca en tiempo de ejecución de C, se muestra este mensaje:

Esta aplicación solicitó la finalización del tiempo de ejecución de modo no habitual. Póngase en contacto con el equipo de asistencia técnica de la aplicación para obtener más información.

Cuando el programa se compila en modo de depuración, el cuadro de mensaje muestra opciones para Anular, Reintentar u Omitir. Si el usuario elige Anular, el programa finaliza inmediatamente y devuelve un código de salida de 3. Si el usuario elige Reintentar, se invoca a un depurador para la depuración Just-In-Time, si está disponible. Si el usuario elige Omitir, abort continúa el procesamiento normal.

En las versiones comerciales y de depuración, abort comprueba si se establece un controlador de señales de anulación. Si se establece un controlador de señales no predeterminado, abort llama a raise(SIGABRT). Use la función signal para asociar una función de controlador de señales de anulación a la señal SIGABRT. Puede realizar acciones personalizadas (por ejemplo, limpiar recursos o registrar información) y finalizar la aplicación con su propio código de error en la función de controlador. Si no se define ningún controlador de señales personalizado, abort no genera la señal SIGABRT.

De forma predeterminada, en compilaciones que no son de depuración de aplicaciones de escritorio o de consola, abort invoca al mecanismo de Servicio de informe de errores de Windows (anteriormente conocido como Dr. Watson) para notificar errores a Microsoft. Este comportamiento se puede habilitar o deshabilitar mediante una llamada a _set_abort_behavior y al establecer o enmascarar la marca _CALL_REPORTFAULT. Cuando se establece la marca, Windows muestra un cuadro de mensaje con un texto similar a "El programa dejó de funcionar correctamente por un problema". El usuario puede optar por invocar un depurador con un botón Depurar o por elegir el botón Cerrar programa para finalizar la aplicación con un código de error definido por el sistema operativo.

Si no se invoca al controlador de informe de errores de Windows, abort llama a _exit para finalizar el proceso con el código de salida 3 y devuelve el control al proceso primario o al sistema operativo. _exit no vacía los búferes de secuencias ni realiza el procesamiento de atexit/_onexit.

Por motivos de compatibilidad de Windows, cuando abort llama a _exit, puede invocar la API ExitProcess de Windows, que a su vez permite ejecutar rutinas de finalización de DLL. Los destructores no se ejecutan en el archivo ejecutable, pero es posible que no pase lo mismo con los archivos DLL cargados en el espacio de proceso del ejecutable. Este comportamiento no se ajusta estrictamente al estándar de C++. Para finalizar inmediatamente un proceso, incluidos los archivos DLL, use la API TerminateProcess de Windows. También puede registrar un controlador de señal de anulación que invoque TerminateProcess para el comportamiento compatible con el estándar. El comportamiento compatible puede conllevar algún costo en la compatibilidad de Windows.

Para obtener más información sobre la depuración de CRT, consulte Técnicas de depuración de CRT.

End Microsoft Specific

De manera predeterminada, el estado global de esta función está limitado a la aplicación. Para cambiarlo, consulte Estado global en CRT.

Requisitos

Routine Encabezado necesario
abort <process.h> o <stdlib.h>

Ejemplo

El siguiente programa intenta abrir un archivo y se anula si se produce un error en el intento.

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

Consulte también

Uso de abort
abort función
Control de procesos y entornos
Funciones _exec, _wexec
exit, _Exit, _exit
raise
signal
Funciones _spawn, _wspawn
_DEBUG
_set_abort_behavior