Macro GetExceptionCode
Recupera um código que identifica o tipo de exceção que ocorre. A função só pode ser chamada de dentro da expressão de filtro ou do bloco de manipulador de exceção de um manipulador de exceção.
Observação
O Compilador de Otimização do Microsoft C/C++ interpreta essa função como uma palavra-chave e seu uso fora da sintaxe apropriada de tratamento de exceções gera um erro do compilador.
Sintaxe
DWORD GetExceptionCode(void);
Parâmetros
Essa macro não tem parâmetros.
Valor retornado
O valor retornado identifica o tipo de exceção. A tabela a seguir identifica os códigos de exceção que podem ocorrer devido a erros comuns de programação. Esses valores são definidos em WinBase.h e WinNT.h.
Código de retorno | Descrição |
---|---|
|
O thread tenta ler ou gravar em um endereço virtual para o qual ele não tem acesso. Esse valor é definido como STATUS_ACCESS_VIOLATION. |
|
O thread tenta acessar um elemento de matriz fora dos limites e o hardware subjacente dá suporte à verificação de limites. Esse valor é definido como STATUS_ARRAY_BOUNDS_EXCEEDED. |
|
Um ponto de interrupção é encontrado. Esse valor é definido como STATUS_BREAKPOINT. |
|
O thread tenta ler ou gravar dados desalinhados no hardware que não fornecem alinhamento. Por exemplo, os valores de 16 bits devem ser alinhados em limites de 2 bytes, valores de 32 bits em limites de 4 bytes e assim por diante. Esse valor é definido como STATUS_DATATYPE_MISALIGNMENT. |
|
Um dos operandos em uma operação de ponto flutuante é desnormal. Um valor desnormal é um que é muito pequeno para representar como um valor de ponto flutuante padrão. Esse valor é definido como STATUS_FLOAT_DENORMAL_OPERAND. |
|
O thread tenta dividir um valor de ponto flutuante por um divisor de ponto flutuante de 0 (zero). Esse valor é definido como STATUS_FLOAT_DIVIDE_BY_ZERO. |
|
O resultado de uma operação de ponto flutuante não pode ser representado exatamente como uma fração decimal. Esse valor é definido como STATUS_FLOAT_INEXACT_RESULT. |
|
Uma exceção de ponto flutuante que não está incluída nesta lista. Esse valor é definido como STATUS_FLOAT_INVALID_OPERATION. |
|
O expoente de uma operação de ponto flutuante é maior do que a magnitude permitida pelo tipo correspondente. Esse valor é definido como STATUS_FLOAT_OVERFLOW. |
|
A pilha estoura ou é subfluxada devido a uma operação de ponto flutuante. Esse valor é definido como STATUS_FLOAT_STACK_CHECK. |
|
O expoente de uma operação de ponto flutuante é menor do que a magnitude permitida pelo tipo correspondente. Esse valor é definido como STATUS_FLOAT_UNDERFLOW. |
|
A memória acessada pelo thread alocada com o modificador PAGE_GUARD. Esse valor é definido como STATUS_GUARD_PAGE_VIOLATION. |
|
O thread tenta executar uma instrução inválida. Esse valor é definido como STATUS_ILLEGAL_INSTRUCTION. |
|
O thread tenta acessar uma página que não está presente e o sistema não consegue carregar a página. Por exemplo, essa exceção poderá ocorrer se uma conexão de rede for perdida durante a execução de um programa em uma rede. Esse valor é definido como STATUS_IN_PAGE_ERROR. |
|
O thread tenta dividir um valor inteiro por um divisor inteiro de 0 (zero). Esse valor é definido como STATUS_INTEGER_DIVIDE_BY_ZERO. |
|
O resultado de uma operação de inteiro cria um valor muito grande para ser mantido pelo registro de destino. Em alguns casos, isso resultará em uma execução do bit mais significativo do resultado. Algumas operações não definem o sinalizador de transporte. Esse valor é definido como STATUS_INTEGER_OVERFLOW. |
|
Um manipulador de exceção retorna uma disposição inválida para o dispatcher de exceção. Os programadores que usam uma linguagem de alto nível, como C, nunca devem encontrar essa exceção. Esse valor é definido como STATUS_INVALID_DISPOSITION. |
|
O thread usou um identificador para um objeto kernel que era inválido (provavelmente porque havia sido fechado.) Esse valor é definido como STATUS_INVALID_HANDLE. |
|
O thread tenta continuar a execução depois que ocorre uma exceção não contínua. Esse valor é definido como STATUS_NONCONTINUABLE_EXCEPTION. |
|
O thread tenta executar uma instrução com uma operação que não é permitida no modo de computador atual. Esse valor é definido como STATUS_PRIVILEGED_INSTRUCTION. |
|
Uma armadilha de rastreamento ou outro mecanismo de instrução única sinaliza que uma instrução é executada. Esse valor é definido como STATUS_SINGLE_STEP. |
|
O thread usa sua pilha. Esse valor é definido como STATUS_STACK_OVERFLOW. |
|
Uma consolidação de quadros foi executada. |
Comentários
A função GetExceptionCode só pode ser chamada de dentro da expressão de filtro ou do bloco de manipulador de exceção de um manipulador de exceção. A expressão de filtro será avaliada se ocorrer uma exceção durante a execução do bloco __try e determinar se o bloco __except é executado ou não.
A expressão de filtro pode invocar uma função de filtro. A função de filtro não pode chamar GetExceptionCode. No entanto, o valor retornado de GetExceptionCode pode ser passado como um parâmetro para uma função de filtro. O valor retornado da função GetExceptionInformation também pode ser passado como um parâmetro para uma função de filtro. GetExceptionInformation retorna um ponteiro para uma estrutura que inclui as informações de código de exceção.
Quando há manipuladores aninhados, cada expressão de filtro é avaliada até que uma seja avaliada como EXCEPTION_EXECUTE_HANDLER ou EXCEPTION_CONTINUE_EXECUTION. Cada expressão de filtro pode invocar GetExceptionCode para obter o código de exceção.
O código de exceção retornado é o código gerado por uma exceção de hardware ou o código especificado na função RaiseException para uma exceção gerada por software.
Ao lidar com a exceção de ponto de interrupção, é importante incrementar o ponteiro de instrução no registro de contexto para continuar com essa exceção.
Exemplos
Para obter um exemplo, consulte Usando um manipulador de exceção.
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte |
Windows XP [somente aplicativos da área de trabalho] |
Servidor mínimo com suporte |
Windows Server 2003 [somente aplicativos da área de trabalho] |
Confira também