Bagikan melalui


struktur EXCEPTION_RECORD (winnt.h)

Menjelaskan pengecualian.

Sintaks

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

Anggota

ExceptionCode

Alasan terjadinya pengecualian. Ini adalah kode yang dihasilkan oleh pengecualian perangkat keras, atau kode yang ditentukan dalam fungsi RaiseException untuk pengecualian yang dihasilkan perangkat lunak. Tabel berikut menjelaskan kode pengecualian yang kemungkinan terjadi karena kesalahan pemrograman umum.

Nilai Makna
EXCEPTION_ACCESS_VIOLATION
Utas mencoba membaca dari atau menulis ke alamat virtual yang tidak memiliki akses yang sesuai.
EXCEPTION_ARRAY_BOUNDS_EXCEEDED
Utas mencoba mengakses elemen array yang berada di luar batas dan perangkat keras yang mendasar mendukung pemeriksaan terikat.
EXCEPTION_BREAKPOINT
Titik henti ditemui.
EXCEPTION_DATATYPE_MISALIGNMENT
Utas mencoba membaca atau menulis data yang tidak selaras pada perangkat keras yang tidak memberikan penyelarasan. Misalnya, nilai 16-bit harus diselaraskan pada batas 2-byte; Nilai 32-bit pada batas 4-byte, dan sebagainya.
EXCEPTION_FLT_DENORMAL_OPERAND
Salah satu operan dalam operasi floating-point adalah denormal. Nilai denormal adalah nilai yang terlalu kecil untuk diwakili sebagai nilai floating-point standar.
EXCEPTION_FLT_DIVIDE_BY_ZERO
Utas mencoba membagi nilai floating-point dengan pembagi floating-point nol.
EXCEPTION_FLT_INEXACT_RESULT
Hasil dari operasi floating-point tidak dapat direpresentasikan persis sebagai pecahan desimal.
EXCEPTION_FLT_INVALID_OPERATION
Pengecualian ini mewakili pengecualian titik mengambang yang tidak disertakan dalam daftar ini.
EXCEPTION_FLT_OVERFLOW
Eksponen operasi floating-point lebih besar dari besaran yang diizinkan oleh jenis yang sesuai.
EXCEPTION_FLT_STACK_CHECK
Tumpukan meluap atau mengalami underflow sebagai hasil dari operasi floating-point.
EXCEPTION_FLT_UNDERFLOW
Eksponen operasi floating-point kurang dari besaran yang diizinkan oleh jenis yang sesuai.
EXCEPTION_ILLEGAL_INSTRUCTION
Utas mencoba menjalankan instruksi yang tidak valid.
EXCEPTION_IN_PAGE_ERROR
Utas mencoba mengakses halaman yang tidak ada, dan sistem tidak dapat memuat halaman. Misalnya, pengecualian ini mungkin terjadi jika koneksi jaringan hilang saat menjalankan program melalui jaringan.
EXCEPTION_INT_DIVIDE_BY_ZERO
Utas mencoba membagi nilai bilangan bulat dengan pembagi bilangan bulat nol.
EXCEPTION_INT_OVERFLOW
Hasil dari operasi bilangan bulat menyebabkan dilakukannya sedikit hasil yang paling signifikan.
EXCEPTION_INVALID_DISPOSITION
Handler pengecualian mengembalikan disposisi yang tidak valid ke dispatcher pengecualian. Programmer yang menggunakan bahasa tingkat tinggi seperti C tidak boleh mengalami pengecualian ini.
EXCEPTION_NONCONTINUABLE_EXCEPTION
Utas mencoba melanjutkan eksekusi setelah pengecualian yang tidak dapat dilanjutkan terjadi.
EXCEPTION_PRIV_INSTRUCTION
Utas mencoba menjalankan instruksi yang operasinya tidak diizinkan dalam mode komputer saat ini.
EXCEPTION_SINGLE_STEP
Perangkap jejak atau mekanisme instruksi tunggal lainnya menandakan bahwa satu instruksi telah dijalankan.
EXCEPTION_STACK_OVERFLOW
Utas menggunakan tumpukannya.
 

Kode pengecualian lain kemungkinan terjadi saat men-debug proses konsol. Ini tidak muncul karena kesalahan pemrograman. Kode pengecualian DBG_CONTROL_C terjadi ketika CTRL+C dimasukkan ke proses konsol yang menangani sinyal CTRL+C dan sedang di-debug. Kode pengecualian ini tidak dimaksudkan untuk ditangani oleh aplikasi. Ini dinaikkan hanya untuk keuntungan debugger, dan dinaikkan hanya ketika debugger dilampirkan ke proses konsol.

ExceptionFlags

Anggota ini berisi nol atau lebih bendera pengecualian. Tabel berikut ini menjelaskan beberapa bendera pengecualian yang umum dilihat. Bendera pengecualian yang tidak ada dalam tabel berikut harus diperlakukan sebagai dicadangkan untuk penggunaan sistem.

Bendera pengecualian Makna
EXCEPTION_NONCONTINUABLE
Kehadiran bendera ini menunjukkan bahwa pengecualian adalah pengecualian yang tidak dapat dilanjutkan, sedangkan tidak adanya bendera ini menunjukkan bahwa pengecualian adalah pengecualian yang dapat dilanjutkan. Setiap upaya untuk melanjutkan eksekusi setelah pengecualian yang tidak dapat dilanjutkan menyebabkan pengecualian EXCEPTION_NONCONTINUABLE_EXCEPTION .
EXCEPTION_SOFTWARE_ORIGINATE
Bendera ini disediakan untuk penggunaan sistem.

ExceptionRecord

Penunjuk ke struktur EXCEPTION_RECORD terkait. Rekaman pengecualian dapat dirangkai bersama untuk memberikan informasi tambahan saat pengecualian berlapis terjadi.

ExceptionAddress

Alamat tempat pengecualian terjadi.

NumberParameters

Jumlah parameter yang terkait dengan pengecualian. Ini adalah jumlah elemen yang ditentukan dalam array ExceptionInformation .

ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS]

Array argumen tambahan yang menjelaskan pengecualian. Fungsi RaiseException dapat menentukan array argumen ini. Untuk sebagian besar kode pengecualian, elemen array tidak terdefinisi. Tabel berikut ini menjelaskan kode pengecualian yang elemen array-nya ditentukan.

Kode pengecualian Makna
EXCEPTION_ACCESS_VIOLATION
Elemen pertama dari array berisi bendera baca-tulis yang menunjukkan jenis operasi yang menyebabkan pelanggaran akses. Jika nilai ini nol, utas mencoba membaca data yang tidak dapat diakses. Jika nilai ini adalah 1, utas mencoba menulis ke alamat yang tidak dapat diakses.

Jika nilai ini adalah 8, utas menyebabkan pelanggaran pencegahan eksekusi data mode pengguna (DEP).

Elemen array kedua menentukan alamat virtual data yang tidak dapat diakses.

EXCEPTION_IN_PAGE_ERROR
Elemen pertama dari array berisi bendera baca-tulis yang menunjukkan jenis operasi yang menyebabkan pelanggaran akses. Jika nilai ini nol, utas mencoba membaca data yang tidak dapat diakses. Jika nilai ini adalah 1, utas mencoba menulis ke alamat yang tidak dapat diakses.

Jika nilai ini adalah 8, utas menyebabkan pelanggaran pencegahan eksekusi data mode pengguna (DEP).

Elemen array kedua menentukan alamat virtual data yang tidak dapat diakses.

Elemen array ketiga menentukan kode NTSTATUS yang mendasar yang menghasilkan pengecualian.

Keterangan

Untuk mengaktifkan debugger untuk men-debug target yang berjalan pada arsitektur yang berbeda (32-bit versus 64-bit), gunakan salah satu bentuk eksplisit struktur ini.

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;

Persyaratan

   
Klien minimum yang didukung Windows XP [aplikasi desktop | Aplikasi UWP]
Server minimum yang didukung Windows Server 2003 [aplikasi desktop | Aplikasi UWP]
Header winnt.h (sertakan Windows.h)

Lihat juga

EXCEPTION_DEBUG_INFO

EXCEPTION_POINTERS

GetExceptionInformation

RaiseException

UnhandledExceptionFilter