Condividi tramite


Macro GetExceptionCode

Recupera un codice che identifica il tipo di eccezione che si verifica. La funzione può essere chiamata solo dall'interno dell'espressione di filtro o dal blocco del gestore eccezioni di un gestore di eccezioni.

Nota

L'ottimizzazione del compilatore Microsoft C/C++ interpreta questa funzione come parola chiave e il relativo uso all'esterno della sintassi di gestione delle eccezioni appropriata genera un errore del compilatore.

 

Sintassi

DWORD GetExceptionCode(void);

Parametri

Questa macro non ha parametri.

Valore restituito

Il valore restituito identifica il tipo di eccezione. La tabella seguente identifica i codici di eccezione che possono verificarsi a causa di errori di programmazione comuni. Questi valori sono definiti in WinBase.h e WinNT.h.

Codice restituito Descrizione
EXCEPTION_ACCESS_VIOLATION
Il thread tenta di leggere o scrivere in un indirizzo virtuale per il quale non ha accesso.
Questo valore viene definito come STATUS_ACCESS_VIOLATION.
EXCEPTION_ARRAY_BOUNDS_EXCEEDED
Il thread tenta di accedere a un elemento di matrice non limitato e l'hardware sottostante supporta il controllo dei limiti.
Questo valore viene definito come STATUS_ARRAY_BOUNDS_EXCEEDED.
EXCEPTION_BREAKPOINT
Viene rilevato un punto di interruzione.
Questo valore viene definito come STATUS_BREAKPOINT.
EXCEPTION_DATATYPE_MISALIGNMENT
Il thread tenta di leggere o scrivere dati non allineati all'hardware che non fornisce l'allineamento. Ad esempio, i valori a 16 bit devono essere allineati su limiti a 2 byte, valori a 32 bit su limiti a 4 byte e così via.
Questo valore viene definito come STATUS_DATATYPE_MISALIGNMENT.
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.
Questo valore viene definito come STATUS_FLOAT_DENORMAL_OPERAND.
EXCEPTION_FLT_DIVIDE_BY_ZERO
Il thread tenta di dividere un valore a virgola mobile da un divisore a virgola mobile pari a 0 (zero).
Questo valore viene definito come STATUS_FLOAT_DIVIDE_BY_ZERO.
EXCEPTION_FLT_INEXACT_RESULT
Il risultato di un'operazione a virgola mobile non può essere rappresentato esattamente come frazione decimale.
Questo valore viene definito come STATUS_FLOAT_INEXACT_RESULT.
EXCEPTION_FLT_INVALID_OPERATION
Eccezione a virgola mobile non inclusa in questo elenco.
Questo valore viene definito come STATUS_FLOAT_INVALID_OPERATION.
EXCEPTION_FLT_OVERFLOW
L'esponente di un'operazione a virgola mobile è maggiore della grandezza consentita dal tipo corrispondente.
Questo valore viene definito come STATUS_FLOAT_OVERFLOW.
EXCEPTION_FLT_STACK_CHECK
Lo stack ha sovraflow o sottoflow, a causa di un'operazione a virgola mobile.
Questo valore viene definito come STATUS_FLOAT_STACK_CHECK.
EXCEPTION_FLT_UNDERFLOW
L'esponente di un'operazione a virgola mobile è minore della grandezza consentita dal tipo corrispondente.
Questo valore viene definito come STATUS_FLOAT_UNDERFLOW.
EXCEPTION_GUARD_PAGE
Il thread ha eseguito l'accesso alla memoria allocata con il modificatore PAGE_GUARD.
Questo valore viene definito come STATUS_GUARD_PAGE_VIOLATION.
EXCEPTION_ILLEGAL_INSTRUCTION
Il thread tenta di eseguire un'istruzione non valida.
Questo valore viene definito come STATUS_ILLEGAL_INSTRUCTION.
EXCEPTION_IN_PAGE_ERROR
Il thread tenta di accedere a una pagina non presente e il sistema non è in grado di caricare la pagina. Ad esempio, questa eccezione potrebbe verificarsi se una connessione di rete viene persa durante l'esecuzione di un programma su una rete.
Questo valore viene definito come STATUS_IN_PAGE_ERROR.
EXCEPTION_INT_DIVIDE_BY_ZERO
Il thread tenta di dividere un valore intero in base a un divisore intero pari a 0 (zero).
Questo valore viene definito come STATUS_INTEGER_DIVIDE_BY_ZERO.
EXCEPTION_INT_OVERFLOW
Il risultato di un'operazione integer crea un valore troppo grande da tenere dal registro di destinazione. In alcuni casi, ciò comporterà un'esecuzione del bit più significativo del risultato. Alcune operazioni non impostano il flag di trasporto.
Questo valore viene definito come STATUS_INTEGER_OVERFLOW.
EXCEPTION_INVALID_DISPOSITION
Un gestore eccezioni restituisce un'eliminazione non valida per il dispatcher dell'eccezione. I programmatori che usano un linguaggio di alto livello, ad esempio C, non dovrebbero mai riscontrare questa eccezione.
Questo valore viene definito come STATUS_INVALID_DISPOSITION.
EXCEPTION_INVALID_HANDLE
Il thread ha usato un handle per un oggetto kernel non valido (probabilmente perché è stato chiuso).
Questo valore viene definito come STATUS_INVALID_HANDLE.
EXCEPTION_NONCONTINUABLE_EXCEPTION
Il thread tenta di continuare l'esecuzione dopo che si verifica un'eccezione non continuabile.
Questo valore viene definito come STATUS_NONCONTINUABLE_EXCEPTION.
EXCEPTION_PRIV_INSTRUCTION
Il thread tenta di eseguire un'istruzione con un'operazione non consentita nella modalità computer corrente.
Questo valore viene definito come STATUS_PRIVILEGED_INSTRUCTION.
EXCEPTION_SINGLE_STEP
Una traccia trap o un altro meccanismo di istruzione singolo segnala che viene eseguita un'istruzione.
Questo valore viene definito come STATUS_SINGLE_STEP.
EXCEPTION_STACK_OVERFLOW
Il thread usa lo stack.
Questo valore viene definito come STATUS_STACK_OVERFLOW.
STATUS_UNWIND_CONSOLIDATE
È stato eseguito un consolidamento dei frame.

 

Commenti

La funzione GetExceptionCode può essere chiamata solo dall'interno dell'espressione di filtro o dal blocco del gestore eccezioni di un gestore di eccezioni. L'espressione di filtro viene valutata se si verifica un'eccezione durante l'esecuzione del blocco __try e determina se viene eseguito o meno il blocco __except .

L'espressione di filtro può richiamare una funzione di filtro. La funzione filtro non può chiamare GetExceptionCode. Tuttavia, il valore restituito di GetExceptionCode può essere passato come parametro a una funzione di filtro. Il valore restituito della funzione GetExceptionInformation può essere passato anche come parametro a una funzione di filtro. GetExceptionInformation restituisce un puntatore a una struttura che include le informazioni sul codice di eccezione.

Quando esistono gestori annidati, ogni espressione di filtro viene valutata fino a quando non viene valutata come EXCEPTION_EXECUTE_HANDLER o EXCEPTION_CONTINUE_EXECUTION. Ogni espressione di filtro può richiamare GetExceptionCode per ottenere il codice eccezione.

Il codice di eccezione restituito è il codice generato da un'eccezione hardware o il codice specificato nella funzione RaiseException per un'eccezione generata dal software.

Quando si gestisce l'eccezione del punto di interruzione, è importante incrementare il puntatore all'istruzione nel record di contesto per continuare da questa eccezione.

Esempio

Per un esempio, vedere Uso di un gestore eccezioni.

Requisiti

Requisito Valore
Client minimo supportato
Windows XP [solo app desktop]
Server minimo supportato
Windows Server 2003 [solo app desktop]

Vedi anche

GetExceptionInformation

RaiseException

Funzioni di gestione delle eccezioni strutturate

Cenni preliminari sulla gestione delle eccezioni strutturate