Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Handler pengecualian berbasis bingkai memungkinkan Anda untuk menangani kemungkinan bahwa pengecualian dapat terjadi dalam urutan kode tertentu. Handler pengecualian berbasis bingkai terdiri dari elemen berikut.
- Bagian kode yang terlindungi
- Ekspresi filter
- Blok penangan pengecualian
Penangan pengecualian berbasis bingkai dideklarasikan dalam sintaksis khusus bahasa. Misalnya, di Microsoft C/C++ Optimizing Compiler, mereka diimplementasikan menggunakan __try dan __except. Untuk informasi selengkapnya, lihat Sintaks Handler .
Isi kode yang dijaga adalah sekumpulan satu atau beberapa pernyataan di mana ekspresi filter dan blok penanganan pengecualian memberikan perlindungan penanganan pengecualian. Isi yang dijaga dapat berupa blok kode, sekumpulan blok berlapis, atau seluruh prosedur atau fungsi. Menggunakan Microsoft C/C++ Optimizing Compiler, blok yang dilindungi diapit oleh kurung kurawal ({}) setelah kata kunci __try.
Ekspresi penyaring dari penangan pengecualian berbasis bingkai adalah ekspresi yang dievaluasi oleh sistem ketika pengecualian terjadi dalam badan yang dilindungi. Evaluasi ini menghasilkan salah satu tindakan berikut oleh sistem.
- Sistem menghentikan pencarian untuk penangan pengecualian, memulihkan status mesin, dan melanjutkan eksekusi utas pada titik di mana pengecualian terjadi.
- Sistem melanjutkan pencariannya untuk handler pengecualian.
- Sistem mentransfer kontrol ke handler pengecualian, dan eksekusi utas berlanjut secara berurutan dalam bingkai tumpukan tempat handler pengecualian ditemukan. Jika handler tidak berada dalam kerangka tumpukan tempat pengecualian terjadi, sistem akan melepas tumpukan, meninggalkan kerangka tumpukan saat ini dan kerangka tumpukan lainnya sampai kembali ke kerangka tumpukan handler pengecualian tersebut. Sebelum penangan pengecualian dijalankan, penangan penghentian dijalankan untuk setiap kode yang dilindungi yang berhenti karena pemindahan kontrol ke penangan pengecualian. Untuk informasi selengkapnya tentang penanganan penghentian, lihat Penanganan Penghentian.
Ekspresi filter bisa menjadi ekspresi sederhana, atau dapat memanggil fungsi filter yang mencoba menangani pengecualian. Anda dapat memanggilGetExceptionCodedan fungsi GetExceptionInformation dari dalam ekspresi filter untuk mendapatkan informasi tentang pengecualian yang difilter. GetExceptionCode mengembalikan kode yang mengidentifikasi jenis pengecualian, dan GetExceptionInformation mengembalikan penunjuk ke struktur EXCEPTION_POINTERS yang berisi penunjuk keKONTEKSdan struktur EXCEPTION_RECORD.
Fungsi-fungsi ini tidak dapat dipanggil dari dalam fungsi filter, tetapi nilai pengembaliannya dapat diteruskan sebagai parameter ke fungsi filter. GetExceptionCode dapat digunakan dalam blok exception-handler, tetapi GetExceptionInformation tidak dapat karena informasi yang dituju biasanya ada di tumpukan dan dihancurkan ketika kontrol ditransfer ke handler pengecualian. Namun, aplikasi dapat menyalin informasi ke penyimpanan yang aman untuk membuatnya tersedia untuk penangan pengecualian.
Keuntungan dari fungsi filter adalah dapat menangani pengecualian dan mengembalikan nilai yang menyebabkan sistem melanjutkan eksekusi dari titik di mana pengecualian terjadi. Dengan blok penangan pengecualian, sebaliknya, eksekusi berlanjut secara berurutan dari penangan pengecualian daripada dimulai dari titik pengecualian.
Menangani pengecualian mungkin sesederhana mencatat kesalahan dan mengatur bendera yang akan diperiksa nanti, mencetak pesan peringatan atau kesalahan, atau mengambil beberapa tindakan terbatas lainnya. Jika eksekusi dapat dilanjutkan, mungkin juga perlu untuk mengubah status komputer dengan memodifikasi rekaman konteks. Untuk contoh fungsi filter yang menangani pengecualian kesalahan halaman, lihat Menggunakan Fungsi Memori Virtual.
Fungsi UnhandledExceptionFilter dapat digunakan sebagai fungsi filter dalam ekspresi filter. Ini mengembalikan EXCEPTION_EXECUTE_HANDLER kecuali jika proses sedang di-debug, jika demikian, akan mengembalikan EXCEPTION_CONTINUE_SEARCH.