Compartilhar via


estrutura EXCEPTION_RECORD (winnt.h)

Descreve uma exceção.

Sintaxe

typedef struct _EXCEPTION_RECORD {
  DWORD                    ExceptionCode;
  DWORD                    ExceptionFlags;
  struct _EXCEPTION_RECORD *ExceptionRecord;
  PVOID                    ExceptionAddress;
  DWORD                    NumberParameters;
  ULONG_PTR                ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
} EXCEPTION_RECORD;

Membros

ExceptionCode

O motivo pelo qual a exceção ocorreu. Esse é 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. As tabelas a seguir descrevem os códigos de exceção que provavelmente ocorrerão devido a erros comuns de programação.

Valor Significado
EXCEPTION_ACCESS_VIOLATION
O thread tentou ler ou gravar em um endereço virtual para o qual ele não tem o acesso apropriado.
EXCEPTION_ARRAY_BOUNDS_EXCEEDED
O thread tentou acessar um elemento de matriz que está fora dos limites e o hardware subjacente dá suporte à verificação de limites.
EXCEPTION_BREAKPOINT
Um ponto de interrupção foi encontrado.
EXCEPTION_DATATYPE_MISALIGNMENT
O thread tentou 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.
EXCEPTION_FLT_DENORMAL_OPERAND
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.
EXCEPTION_FLT_DIVIDE_BY_ZERO
O thread tentou dividir um valor de ponto flutuante por um divisor de ponto flutuante de zero.
EXCEPTION_FLT_INEXACT_RESULT
O resultado de uma operação de ponto flutuante não pode ser representado exatamente como uma fração decimal.
EXCEPTION_FLT_INVALID_OPERATION
Essa exceção representa qualquer exceção de ponto flutuante não incluída nesta lista.
EXCEPTION_FLT_OVERFLOW
O expoente de uma operação de ponto flutuante é maior do que a magnitude permitida pelo tipo correspondente.
EXCEPTION_FLT_STACK_CHECK
A pilha estoura ou é subfluxada como resultado de uma operação de ponto flutuante.
EXCEPTION_FLT_UNDERFLOW
O expoente de uma operação de ponto flutuante é menor do que a magnitude permitida pelo tipo correspondente.
EXCEPTION_ILLEGAL_INSTRUCTION
O thread tentou executar uma instrução inválida.
EXCEPTION_IN_PAGE_ERROR
O thread tentou acessar uma página que não estava presente e o sistema não pôde 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 pela rede.
EXCEPTION_INT_DIVIDE_BY_ZERO
O thread tentou dividir um valor inteiro por um divisor inteiro de zero.
EXCEPTION_INT_OVERFLOW
O resultado de uma operação de inteiro causou uma execução do bit mais significativo do resultado.
EXCEPTION_INVALID_DISPOSITION
Um manipulador de exceção retornou 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.
EXCEPTION_NONCONTINUABLE_EXCEPTION
O thread tentou continuar a execução depois que ocorreu uma exceção nãocontinuável.
EXCEPTION_PRIV_INSTRUCTION
O thread tentou executar uma instrução cuja operação não é permitida no modo de computador atual.
EXCEPTION_SINGLE_STEP
Uma armadilha de rastreamento ou outro mecanismo de instrução única sinalizou que uma instrução foi executada.
EXCEPTION_STACK_OVERFLOW
O thread usou sua pilha.
 

É provável que outro código de exceção ocorra ao depurar processos de console. Ele não surge devido a um erro de programação. O código de exceção DBG_CONTROL_C ocorre quando CTRL+C é inserido em um processo de console que manipula sinais CTRL+C e está sendo depurado. Esse código de exceção não deve ser tratado por aplicativos. Ele é gerado apenas para o benefício do depurador e é gerado somente quando um depurador é anexado ao processo de console.

ExceptionFlags

Esse membro contém zero ou mais sinalizadores de exceção. A tabela a seguir descreve alguns dos sinalizadores de exceção comumente vistos. Os sinalizadores de exceção não presentes na tabela a seguir devem ser tratados como reservados para uso do sistema.

Sinalizador de exceção Significado
EXCEPTION_NONCONTINUABLE
A presença desse sinalizador indica que a exceção é uma exceção nãocontinuável, enquanto a ausência desse sinalizador indica que a exceção é uma exceção contínua. Qualquer tentativa de continuar a execução após uma exceção nãocontinuável causar a exceção EXCEPTION_NONCONTINUABLE_EXCEPTION .
EXCEPTION_SOFTWARE_ORIGINATE
Esse sinalizador é reservado para uso do sistema.

ExceptionRecord

Um ponteiro para uma estrutura EXCEPTION_RECORD associada. Os registros de exceção podem ser encadeados para fornecer informações adicionais quando ocorrerem exceções aninhadas.

ExceptionAddress

O endereço em que a exceção ocorreu.

NumberParameters

O número de parâmetros associados à exceção. Esse é o número de elementos definidos na matriz ExceptionInformation .

ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS]

Uma matriz de argumentos adicionais que descrevem a exceção. A função RaiseException pode especificar essa matriz de argumentos. Para a maioria dos códigos de exceção, os elementos de matriz são indefinidos. A tabela a seguir descreve os códigos de exceção cujos elementos de matriz são definidos.

Código da exceção Significado
EXCEPTION_ACCESS_VIOLATION
O primeiro elemento da matriz contém um sinalizador de leitura/gravação que indica o tipo de operação que causou a violação de acesso. Se esse valor for zero, o thread tentou ler os dados inacessíveis. Se esse valor for 1, o thread tentará gravar em um endereço inacessível.

Se esse valor for 8, o thread causará uma violação de DEP (prevenção de execução de dados) no modo de usuário.

O segundo elemento de matriz especifica o endereço virtual dos dados inacessíveis.

EXCEPTION_IN_PAGE_ERROR
O primeiro elemento da matriz contém um sinalizador de leitura/gravação que indica o tipo de operação que causou a violação de acesso. Se esse valor for zero, o thread tentou ler os dados inacessíveis. Se esse valor for 1, o thread tentará gravar em um endereço inacessível.

Se esse valor for 8, o thread causará uma violação de DEP (prevenção de execução de dados) no modo de usuário.

O segundo elemento de matriz especifica o endereço virtual dos dados inacessíveis.

O terceiro elemento de matriz especifica o código NTSTATUS subjacente que resultou na exceção.

Comentários

Para habilitar um depurador para depurar um destino que está em execução em uma arquitetura diferente (32 bits versus 64 bits), use uma das formas explícitas dessa estrutura.

typedef struct _EXCEPTION_RECORD32 {
    DWORD    ExceptionCode;
    DWORD ExceptionFlags;
    DWORD ExceptionRecord;
    DWORD ExceptionAddress;
    DWORD NumberParameters;
    DWORD ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
} EXCEPTION_RECORD32, *PEXCEPTION_RECORD32;

typedef struct _EXCEPTION_RECORD64 {
    DWORD    ExceptionCode;
    DWORD ExceptionFlags;
    DWORD64 ExceptionRecord;
    DWORD64 ExceptionAddress;
    DWORD NumberParameters;
    DWORD __unusedAlignment;
    DWORD64 ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
} EXCEPTION_RECORD64, *PEXCEPTION_RECORD64;

Requisitos

   
Cliente mínimo com suporte Windows XP [aplicativos da área de trabalho | Aplicativos UWP]
Servidor mínimo com suporte Windows Server 2003 [aplicativos da área de trabalho | Aplicativos UWP]
Cabeçalho winnt.h (inclua Windows.h)

Confira também

EXCEPTION_DEBUG_INFO

EXCEPTION_POINTERS

Getexceptioninformation

Raiseexception

Unhandledexceptionfilter