GetExceptionCode 宏

擷取程式碼,識別發生的例外狀況類型。 函式只能從例外狀況處理常式的篩選運算式或例外狀況處理常式區塊內呼叫。

注意

Microsoft C/C++ 優化編譯器會將此函式解譯為關鍵字,並在適當的例外狀況處理語法之外使用會產生編譯器錯誤。

 

語法

DWORD GetExceptionCode(void);

參數

此宏沒有參數。

傳回值

傳回值會識別例外狀況的類型。 下表識別因常見程式設計錯誤而可能發生的例外狀況代碼。 這些值定義于 WinBase.h 和 WinNT.h 中。

傳回碼 描述
EXCEPTION_ACCESS_VIOLATION
執行緒會嘗試讀取或寫入其沒有存取權的虛擬位址。
此值定義為STATUS_ACCESS_VIOLATION。
EXCEPTION_ARRAY_BOUNDS_EXCEEDED
執行緒會嘗試存取超出界限的陣列元素,而基礎硬體支援界限檢查。
此值定義為STATUS_ARRAY_BOUNDS_EXCEEDED。
EXCEPTION_BREAKPOINT
遇到中斷點。
此值定義為STATUS_BREAKPOINT。
EXCEPTION_DATATYPE_MISALIGNMENT
執行緒會嘗試讀取或寫入未提供對齊之硬體上未對齊的資料。 例如,16 位值必須對齊 2 位元組界限、4 位元組界限上的 32 位值等等。
此值定義為STATUS_DATATYPE_MISALIGNMENT。
EXCEPTION_FLT_DENORMAL_OPERAND
浮點運算中的其中一個運算元是反正規的。 反正規值是太小而無法表示為標準浮點值的值。
此值定義為STATUS_FLOAT_DENORMAL_OPERAND。
EXCEPTION_FLT_DIVIDE_BY_ZERO
執行緒會嘗試將浮點數除以 0 (零的浮點除數) 。
此值定義為STATUS_FLOAT_DIVIDE_BY_ZERO。
EXCEPTION_FLT_INEXACT_RESULT
浮點運算的結果不能完全以小數點表示。
此值定義為STATUS_FLOAT_INEXACT_RESULT。
EXCEPTION_FLT_INVALID_OPERATION
此清單中未包含的浮點例外狀況。
此值定義為STATUS_FLOAT_INVALID_OPERATION。
EXCEPTION_FLT_OVERFLOW
浮點運算的指數大於對應類型所允許的大小。
此值定義為STATUS_FLOAT_OVERFLOW。
EXCEPTION_FLT_STACK_CHECK
堆疊因為浮點運算而溢位或下溢。
此值定義為STATUS_FLOAT_STACK_CHECK。
EXCEPTION_FLT_UNDERFLOW
浮點運算的指數小於對應類型所允許的大小。
此值定義為STATUS_FLOAT_UNDERFLOW。
EXCEPTION_GUARD_PAGE
執行緒已使用 PAGE_GUARD 修飾詞配置記憶體。
此值定義為STATUS_GUARD_PAGE_VIOLATION。
EXCEPTION_ILLEGAL_INSTRUCTION
執行緒會嘗試執行不正確指令。
此值定義為STATUS_ILLEGAL_INSTRUCTION。
EXCEPTION_IN_PAGE_ERROR
執行緒會嘗試存取不存在的頁面,而且系統無法載入頁面。 例如,如果網路連線在透過網路執行程式時遺失,可能會發生此例外狀況。
此值定義為STATUS_IN_PAGE_ERROR。
EXCEPTION_INT_DIVIDE_BY_ZERO
執行緒會嘗試將整數值除以 0 (零的整數除數) 。
此值定義為STATUS_INTEGER_DIVIDE_BY_ZERO。
EXCEPTION_INT_OVERFLOW
整數運算的結果會建立值太大而無法由目的地暫存器保留。 在某些情況下,這會導致執行最顯著的結果。 某些作業不會設定攜帶旗標。
此值定義為STATUS_INTEGER_OVERFLOW。
EXCEPTION_INVALID_DISPOSITION
例外狀況處理常式會將不正確處置傳回給例外狀況發送器。 使用 C 等高階語言的程式設計人員應該永遠不會遇到這個例外狀況。
此值定義為STATUS_INVALID_DISPOSITION。
EXCEPTION_INVALID_HANDLE
執行緒對核心物件使用控制碼,可能是因為已關閉而 (無效。)
此值定義為STATUS_INVALID_HANDLE。
EXCEPTION_NONCONTINUABLE_EXCEPTION
執行緒會在發生不可持續性的例外狀況之後嘗試繼續執行。
此值定義為STATUS_NONCONTINUABLE_EXCEPTION。
EXCEPTION_PRIV_INSTRUCTION
執行緒會嘗試使用目前電腦模式中不允許的作業來執行指令。
此值定義為STATUS_PRIVILEGED_INSTRUCTION。
EXCEPTION_SINGLE_STEP
追蹤陷阱或其他單一指令機制表示執行一個指令。
此值定義為STATUS_SINGLE_STEP。
EXCEPTION_STACK_OVERFLOW
執行緒會使用其堆疊。
此值定義為STATUS_STACK_OVERFLOW。
STATUS_UNWIND_CONSOLIDATE
已執行框架合併。

 

備註

GetExceptionCode函式只能從例外狀況處理常式的篩選運算式或例外狀況處理常式區塊內呼叫。 如果執行 __try 區塊期間發生例外狀況,則會評估篩選運算式,並判斷是否執行 __except 區塊。

篩選運算式可以叫用篩選函式。 篩選函數無法呼叫 GetExceptionCode。 不過, GetExceptionCode 的傳回值可以當做參數傳遞至篩選函式。 GetExceptionInformation函式的傳回值也可以當做參數傳遞至篩選函式。 GetExceptionInformation 會傳回包含例外狀況程式碼資訊的 結構指標。

當巢狀處理常式存在時,系統會評估每個篩選運算式,直到評估為EXCEPTION_EXECUTE_HANDLER或EXCEPTION_CONTINUE_EXECUTION為止。 每個篩選運算式都可以叫用 GetExceptionCode 來取得例外狀況程式碼。

傳回的例外狀況代碼是硬體例外狀況所產生的程式碼,或是軟體所產生例外狀況之 RaiseException 函式中指定的程式碼。

處理中斷點例外狀況時,請務必遞增內容記錄中的指令指標,以從這個例外狀況繼續。

範例

如需範例,請參閱 使用例外狀況處理常式

規格需求

需求
最低支援的用戶端
Windows XP [僅限傳統型應用程式]
最低支援的伺服器
Windows Server 2003 [僅限傳統型應用程式]

另請參閱

GetExceptionInformation

RaiseException

結構化例外狀況處理函式

結構化例外狀況處理概觀