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.
|
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