Partilhar via


abort

Aborta o processo atual e devolve um código de erro.

Observação

Não use este método para desligar uma aplicação da Microsoft Store ou da Universal Windows Platform (UWP), exceto em cenários de teste ou depuração. As formas programáticas ou de interface do usuário para fechar um aplicativo da Loja não são permitidas de acordo com as políticas da Microsoft Store. Para obter mais informações, consulte Ciclo de vida do aplicativo UWP.

Sintaxe

void abort( void );

Valor de retorno

abort não devolve o controlo ao processo de chamada. Por defeito, verifica se há um manipulador de sinal de aborto e aumenta SIGABRT se estiver definido um. Depois abort termina o processo atual e devolve um código de saída ao processo pai.

Observações

Específico da Microsoft

Por defeito, quando uma aplicação é construída com a biblioteca de tempo de execução de depuração, a abort rotina apresenta uma mensagem de erro antes de SIGABRT ser gerada. Para aplicações de consola a correr em modo consola, a mensagem é enviada para STDERR. As aplicações de ambiente de trabalho do Windows e as de consola a correr em modo janela exibem a mensagem numa caixa de mensagem. Para suprimir a mensagem, use _set_abort_behavior para limpar a _WRITE_ABORT_MSG bandeira. A mensagem apresentada depende da versão do ambiente de execução utilizado. Para aplicações construídas usando as versões mais recentes do Visual C++, a mensagem assemelha-se a esta:

R6010 - abort() foi chamado

Em versões anteriores da biblioteca de runtime C, esta mensagem era exibida:

Esta aplicação solicitou ao Tempo de Execução que o terminasse de forma invulgar. Por favor, contacte a equipa de suporte da candidatura para mais informações.

Quando o programa é compilado em modo de depuração, a caixa de mensagem mostra as opções para Abortar, Tentar Retentar ou Ignorar. Se o utilizador escolher Abortar, o programa termina imediatamente e devolve um código de saída de 3. Se o utilizador escolher Retry, é invocado um depurador para depuração just-in-time, se disponível. Se o utilizador escolher Ignorar, abort continua o processamento normal.

Tanto em compilações de retalho como de depuração, abort verifica depois se um handler de sinal de abort está definido. Se um manipulador de sinal não padrão estiver definido, abort chama raise(SIGABRT). Use a signal função para associar uma função de manipulador de sinal de aborto ao SIGABRT sinal. Pode realizar ações personalizadas — por exemplo, limpar recursos ou informações de registo — e terminar a aplicação com o seu próprio código de erro na função handler. Se não for definido um manipulador de sinal personalizado, abort não aumenta o SIGABRT sinal.

Por defeito, em versões sem depuração de aplicações de desktop ou consola, abort é então invocado o mecanismo Windows Error Reporting Service (anteriormente conhecido como Dr. Watson) para reportar falhas à Microsoft. Este comportamento pode ser ativado ou desativado ao chamar _set_abort_behavior e definir ou mascarar a _CALL_REPORTFAULT bandeira. Quando a bandeira está definida, o Windows mostra uma caixa de mensagem com texto algo como "Um problema fez o programa deixar de funcionar corretamente." O utilizador pode escolher invocar um depurador com um botão Debug , ou escolher o botão Fechar programa para terminar a aplicação com um código de erro definido pelo sistema operativo.

Se o handler de relatório de erros do Windows não for invocado, então abort chama _exit para terminar o processo com o código de saída 3 e devolve o controlo ao processo pai ou ao sistema operativo. _exit Não limpa buffers de fluxo nem faz atexit/_onexit processamento.

Por razões de compatibilidade com o Windows, ao abort fazer chamadas _exit, pode invocar a API do Windows ExitProcess , que por sua vez permite a execução de rotinas de terminação de DLL. Os destrutores não são executados no executável, mas o mesmo pode não ser verdade para DLLs carregadas no espaço de processamento do executável. Este comportamento não está estritamente em conformidade com o padrão C++. Para terminar imediatamente um processo, incluindo quaisquer DLLs, use a API do Windows TerminateProcess . Também pode registar um manipulador de sinal de aborto que invoca TerminateProcess comportamentos conformes ao padrão. O comportamento conforme pode ter algum custo na compatibilidade com o Windows.

Para mais informações sobre depuração de CRT, veja técnicas de depuração CRT.

Fim Específico da Microsoft

Por padrão, o estado global dessa função tem como escopo o aplicativo. Para alterar isso, veja Estado global no CRT.

Requerimentos

Rotina Cabeçalho obrigatório
abort <process.h> ou <stdlib.h>

Example

O programa seguinte tenta abrir um ficheiro e aborta se a tentativa falhar.

// 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 também

Utilização abort
abort Função
Controlo de processos e ambientes
_exec, _wexec funções
exit, _Exit, _exit
raise
signal
_spawn, _wspawn funções
_DEBUG
_set_abort_behavior