struttura EXCEPTION_RECORD (winnt.h)

Descrive un'eccezione.

Sintassi

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

Members

ExceptionCode

Motivo per cui si è verificata l'eccezione. Si tratta del codice generato da un'eccezione hardware o dal codice specificato nella funzione RaiseException per un'eccezione generata dal software. Le tabelle seguenti descrivono i codici di eccezione che potrebbero verificarsi a causa di errori di programmazione comuni.

Valore Significato
EXCEPTION_ACCESS_VIOLATION
Il thread ha provato a leggere o scrivere in un indirizzo virtuale per il quale non ha l'accesso appropriato.
EXCEPTION_ARRAY_BOUNDS_EXCEEDED
Il thread ha tentato di accedere a un elemento di matrice non limitato e l'hardware sottostante supporta il controllo dei limiti.
EXCEPTION_BREAKPOINT
È stato rilevato un punto di interruzione.
EXCEPTION_DATATYPE_MISALIGNMENT
Il thread ha cercato di leggere o scrivere dati non allineati all'hardware che non fornisce l'allineamento. Ad esempio, i valori a 16 bit devono essere allineati sui limiti a 2 byte; Valori a 32 bit su limiti a 4 byte e così via.
EXCEPTION_FLT_DENORMAL_OPERAND
Uno degli operandi in un'operazione a virgola mobile è denormal. Un valore denormale è un valore troppo piccolo da rappresentare come valore a virgola mobile standard.
EXCEPTION_FLT_DIVIDE_BY_ZERO
Il thread ha cercato di dividere un valore a virgola mobile da un divisore a virgola mobile pari a zero.
EXCEPTION_FLT_INEXACT_RESULT
Il risultato di un'operazione a virgola mobile non può essere rappresentato esattamente come frazione decimale.
EXCEPTION_FLT_INVALID_OPERATION
Questa eccezione rappresenta qualsiasi eccezione a virgola mobile non inclusa in questo elenco.
EXCEPTION_FLT_OVERFLOW
L'esponente di un'operazione a virgola mobile è maggiore della grandezza consentita dal tipo corrispondente.
EXCEPTION_FLT_STACK_CHECK
Stack overflow o sottoflow come risultato di un'operazione a virgola mobile.
EXCEPTION_FLT_UNDERFLOW
L'esponente di un'operazione a virgola mobile è minore della grandezza consentita dal tipo corrispondente.
EXCEPTION_ILLEGAL_INSTRUCTION
Il thread ha tentato di eseguire un'istruzione non valida.
EXCEPTION_IN_PAGE_ERROR
Il thread ha tentato di accedere a una pagina non presente e il sistema non è riuscito a caricare la pagina. Ad esempio, questa eccezione potrebbe verificarsi se una connessione di rete viene persa durante l'esecuzione di un programma sulla rete.
EXCEPTION_INT_DIVIDE_BY_ZERO
Il thread ha tentato di dividere un valore intero in base a un divisore intero pari a zero.
EXCEPTION_INT_OVERFLOW
Il risultato di un'operazione integer ha causato un'esecuzione del bit più significativo del risultato.
EXCEPTION_INVALID_DISPOSITION
Un gestore di eccezioni ha restituito un'eliminazione non valida al dispatcher dell'eccezione. I programmatori che usano un linguaggio di alto livello, ad esempio C, non dovrebbero mai riscontrare questa eccezione.
EXCEPTION_NONCONTINUABLE_EXCEPTION
Il thread ha tentato di continuare l'esecuzione dopo che si è verificata un'eccezione noncontinuabile.
EXCEPTION_PRIV_INSTRUCTION
Il thread ha tentato di eseguire un'istruzione la cui operazione non è consentita nella modalità computer corrente.
EXCEPTION_SINGLE_STEP
Una traccia trap o un altro meccanismo di istruzione singola ha segnalato che è stata eseguita un'istruzione.
EXCEPTION_STACK_OVERFLOW
Il thread ha usato lo stack.
 

È probabile che si verifichi un altro codice di eccezione quando si esegue il debug dei processi della console. Non si verifica a causa di un errore di programmazione. Il codice di eccezione DBG_CONTROL_C si verifica quando CTRL+C è l'input di un processo console che gestisce i segnali CTRL+C e viene eseguito il debug. Questo codice di eccezione non deve essere gestito dalle applicazioni. Viene generato solo per il vantaggio del debugger e viene generato solo quando un debugger è collegato al processo della console.

ExceptionFlags

Questo membro contiene zero o più flag di eccezione. La tabella seguente descrive alcuni dei flag di eccezione comunemente visualizzati. I flag di eccezione non presenti nella tabella seguente devono essere considerati riservati per l'uso del sistema.

Flag di eccezione Significato
EXCEPTION_NONCONTINUABLE
La presenza di questo flag indica che l'eccezione è un'eccezione noncontinuabile, mentre l'assenza di questo flag indica che l'eccezione è un'eccezione continuabile. Qualsiasi tentativo di continuare l'esecuzione dopo un'eccezione noncontinuabile causa l'eccezione EXCEPTION_NONCONTINUABLE_EXCEPTION .
EXCEPTION_SOFTWARE_ORIGINATE
Questo flag è riservato per l'uso del sistema.

ExceptionRecord

Puntatore a una struttura di EXCEPTION_RECORD associata. I record di eccezione possono essere concatenati insieme per fornire informazioni aggiuntive quando si verificano eccezioni annidate.

ExceptionAddress

Indirizzo in cui si è verificata l'eccezione.

NumberParameters

Numero di parametri associati all'eccezione. Si tratta del numero di elementi definiti nella matrice ExceptionInformation .

ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS]

Matrice di argomenti aggiuntivi che descrivono l'eccezione. La funzione RaiseException può specificare questa matrice di argomenti. Per la maggior parte dei codici di eccezione, gli elementi della matrice non sono definiti. La tabella seguente descrive i codici di eccezione i cui elementi della matrice sono definiti.

Codice eccezione Significato
EXCEPTION_ACCESS_VIOLATION
Il primo elemento della matrice contiene un flag di lettura-scrittura che indica il tipo di operazione che ha causato la violazione di accesso. Se questo valore è zero, il thread ha tentato di leggere i dati inaccessibili. Se questo valore è 1, il thread ha tentato di scrivere in un indirizzo inaccessibile.

Se questo valore è 8, il thread ha causato una violazione dell'esecuzione dei dati in modalità utente (DEP).

Il secondo elemento matrice specifica l'indirizzo virtuale dei dati inaccessibile.

EXCEPTION_IN_PAGE_ERROR
Il primo elemento della matrice contiene un flag di lettura-scrittura che indica il tipo di operazione che ha causato la violazione di accesso. Se questo valore è zero, il thread ha tentato di leggere i dati inaccessibili. Se questo valore è 1, il thread ha tentato di scrivere in un indirizzo inaccessibile.

Se questo valore è 8, il thread ha causato una violazione dell'esecuzione dei dati in modalità utente (DEP).

Il secondo elemento matrice specifica l'indirizzo virtuale dei dati inaccessibile.

Il terzo elemento matrice specifica il codice NTSTATUS sottostante che ha generato l'eccezione.

Commenti

Per abilitare un debugger per eseguire il debug di una destinazione in esecuzione in un'architettura diversa (a 32 bit rispetto a 64 bit), usare una delle forme esplicite di questa struttura.

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;

Requisiti

   
Client minimo supportato Windows XP [app desktop | App UWP]
Server minimo supportato Windows Server 2003 [app desktop | App UWP]
Intestazione winnt.h (include Windows.h)

Vedi anche

EXCEPTION_DEBUG_INFO

EXCEPTION_POINTERS

GetExceptionInformation

RaiseException

UnhandledExceptionFilter