Bagikan melalui


Penanganan Pengecualian Debugger

Penanganan pengecualian mode pengguna oleh sistem menyediakan dukungan untuk debugger yang lebih canggih. Jika proses di mana pengecualian terjadi sedang di-debug, sistem akan menghasilkan peristiwa debug. Jika debugger menggunakan fungsiWaitForDebugEvent, peristiwa debug menyebabkan fungsi tersebut dikembalikan dengan penunjuk ke struktur DEBUG_EVENT. Struktur ini berisi pengidentifikasi proses dan utas yang dapat digunakan debugger dalam mengakses catatan konteks utas. Struktur ini juga berisi struktur EXCEPTION_DEBUG_INFO yang menyertakan salinan rekaman pengecualian.

Ketika sistem mencari handler pengecualian, sistem melakukan dua upaya untuk memberi tahu debugger proses. Upaya pemberitahuan pertama memberi debugger kesempatan untuk menangani titik henti atau pengecualian langkah tunggal. Ini dikenal sebagai pemberitahuan kesempatan pertama. Pengguna kemudian dapat mengeluarkan perintah debugger untuk memanipulasi lingkungan proses sebelum penangan pengecualian dijalankan. Upaya kedua untuk memberi tahu debugger hanya terjadi jika sistem tidak dapat menemukan handler pengecualian berbasis bingkai yang menangani pengecualian. Ini dikenal sebagai pemberitahuan kesempatan terakhir. Jika debugger tidak menangani pengecualian setelah pemberitahuan kesempatan terakhir, sistem mengakhiri proses yang sedang di-debug.

Pada setiap upaya pemberitahuan, debugger menggunakan fungsi ContinueDebugEvent untuk mengembalikan kontrol ke sistem. Sebelum mengembalikan kontrol, debugger dapat menangani pengecualian dan memodifikasi status utas yang sesuai, atau dapat memilih untuk tidak menangani pengecualian. Menggunakan ContinueDebugEvent, debugger dapat menunjukkan bahwa ia telah menangani pengecualian, dalam hal ini status komputer dipulihkan dan eksekusi utas dilanjutkan pada titik di mana pengecualian terjadi. Debugger juga dapat menunjukkan bahwa ia tidak menangani pengecualian, yang menyebabkan sistem melanjutkan pencariannya untuk penangan pengecualian.