winnt.h (EXCEPTION_RECORD 結構)

描述例外狀況。

語法

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

成員

ExceptionCode

發生例外狀況的原因。 這是硬體例外狀況所產生的程式碼,或軟體產生例外狀況 之 RaiseException 函式中指定的程式碼。 下表描述可能因為常見的程式設計錯誤而發生的例外狀況代碼。

意義
EXCEPTION_ACCESS_VIOLATION
執行緒嘗試讀取或寫入其沒有適當存取權的虛擬位址。
EXCEPTION_ARRAY_BOUNDS_EXCEEDED
執行緒嘗試存取超出界限的陣列元素,而基礎硬體支援界限檢查。
EXCEPTION_BREAKPOINT
遇到中斷點。
EXCEPTION_DATATYPE_MISALIGNMENT
執行緒嘗試讀取或寫入未提供對齊之硬體上不對齊的資料。 例如,16 位值必須在 2 位元組界限上對齊;4 位元組界限上的 32 位值等等。
EXCEPTION_FLT_DENORMAL_OPERAND
浮點運算中的其中一個運算元是反正規的。 反正規值是太小而無法表示為標準浮點值的值。
EXCEPTION_FLT_DIVIDE_BY_ZERO
執行緒嘗試將浮點數除以零的浮點除數。
EXCEPTION_FLT_INEXACT_RESULT
浮點運算的結果不能完全表示為小數點。
EXCEPTION_FLT_INVALID_OPERATION
此例外狀況代表此清單中未包含的任何浮點例外狀況。
EXCEPTION_FLT_OVERFLOW
浮點運算的指數大於對應類型所允許的大小。
EXCEPTION_FLT_STACK_CHECK
堆疊溢位或下溢,因為浮點運算的結果。
EXCEPTION_FLT_UNDERFLOW
浮點運算的指數小於對應類型所允許的大小。
EXCEPTION_ILLEGAL_INSTRUCTION
執行緒嘗試執行不正確指令。
EXCEPTION_IN_PAGE_ERROR
執行緒嘗試存取不存在的頁面,而且系統無法載入頁面。 例如,如果網路連線在透過網路執行程式時遺失,就可能發生此例外狀況。
EXCEPTION_INT_DIVIDE_BY_ZERO
執行緒嘗試將整數值除以零的整數除數。
EXCEPTION_INT_OVERFLOW
整數運算的結果導致執行結果的最大有效位。
EXCEPTION_INVALID_DISPOSITION
例外狀況處理常式將不正確處置傳回給例外狀況發送器。 使用 C 等高階語言的程式設計人員應該永遠不會遇到此例外狀況。
EXCEPTION_NONCONTINUABLE_EXCEPTION
執行緒嘗試在發生不可繼續的例外狀況之後繼續執行。
EXCEPTION_PRIV_INSTRUCTION
執行緒嘗試執行指令,但目前電腦模式中不允許其作業。
EXCEPTION_SINGLE_STEP
追蹤陷阱或其他單一指令機制表示已執行一個指令。
EXCEPTION_STACK_OVERFLOW
執行緒已用到其堆疊。
 

偵錯主控台進程時,可能會發生另一個例外狀況程式碼。 它不會因為程式設計錯誤而發生。 當 CTRL+C 輸入處理 CTRL+C 訊號且正在偵錯的主控台進程時,就會發生 DBG_CONTROL_C 例外狀況程式碼。 此例外狀況程式碼並非由應用程式處理。 它只會針對偵錯工具的優點而引發,而且只有在偵錯工具附加至主控台進程時才會引發。

ExceptionFlags

這個成員包含零個或多個例外狀況旗標。 下表描述一些常見的例外狀況旗標。 下表中沒有例外狀況旗標應該視為保留供系統使用。

例外狀況旗標 意義
EXCEPTION_NONCONTINUABLE
此旗標的存在表示例外狀況是不可連續的例外狀況,而缺少此旗標則表示例外狀況是可持續性的例外狀況。 在不可繼續的例外狀況之後,任何嘗試繼續執行都會造成 EXCEPTION_NONCONTINUABLE_EXCEPTION例外狀況
EXCEPTION_SOFTWARE_ORIGINATE
此旗標保留供系統使用。

ExceptionRecord

相關聯 EXCEPTION_RECORD 結構的指標。 例外狀況記錄可以鏈結在一起,以在發生巢狀例外狀況時提供其他資訊。

ExceptionAddress

發生例外狀況的位址。

NumberParameters

與例外狀況相關聯的參數數目。 這是 ExceptionInformation 陣列中定義的元素數目。

ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS]

描述例外狀況的其他引數陣列。 RaiseException 函式可以指定這個引數陣列。 對於大部分的例外狀況代碼,陣列元素是未定義的。 下表描述定義陣列元素的例外狀況代碼。

例外狀況代碼 意義
EXCEPTION_ACCESS_VIOLATION
陣列的第一個專案包含讀寫旗標,指出造成存取違規的作業類型。 如果此值為零,則執行緒嘗試讀取無法存取的資料。 如果此值為 1,執行緒嘗試寫入無法存取的位址。

如果此值為 8,執行緒會導致使用者模式資料執行防止 (DEP) 違規。

第二個陣列元素會指定無法存取資料的虛擬位址。

EXCEPTION_IN_PAGE_ERROR
陣列的第一個專案包含讀寫旗標,指出造成存取違規的作業類型。 如果此值為零,則執行緒嘗試讀取無法存取的資料。 如果此值為 1,執行緒嘗試寫入無法存取的位址。

如果此值為 8,執行緒會導致使用者模式資料執行防止 (DEP) 違規。

第二個陣列元素會指定無法存取資料的虛擬位址。

第三個陣列元素會指定導致例外狀況的基礎 NTSTATUS 程式碼。

備註

若要讓偵錯工具偵錯在不同架構上執行的目標, (32 位與 64 位) ,請使用這個結構的其中一種明確形式。

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;

規格需求

   
最低支援的用戶端 Windows XP [傳統型應用程式 |UWP 應用程式]
最低支援的伺服器 Windows Server 2003 [傳統型應用程式 |UWP 應用程式]
標頭 winnt.h (包括 Windows.h)

另請參閱

EXCEPTION_DEBUG_INFO

EXCEPTION_POINTERS

GetExceptionInformation

RaiseException

UnhandledExceptionFilter