Bagikan melalui


Memasuki Debugger

Kode "user-mode" dan "kernel-mode" menggunakan rutinitas yang berbeda untuk masuk ke debugger.

User-Mode Membongkar Rutinitas

Rutinitas istirahat menyebabkan pengecualian terjadi dalam proses saat ini, sehingga utas panggilan dapat memberi sinyal debugger yang terkait dengan proses panggilan.

Untuk masuk ke debugger dari program mode pengguna, gunakan fungsi DebugBreak. Prototipenya adalah sebagai berikut:

VOID DebugBreak(VOID);

Ketika program mode pengguna memanggil DebugBreak, kemungkinan tindakan berikut akan terjadi:

  1. Jika debugger mode pengguna terpasang, program akan masuk ke debugger. Ini berarti bahwa program akan dijeda dan debugger akan menjadi aktif.

  2. Jika debugger mode pengguna tidak terpasang, tetapi penelusuran kesalahan mode kernel diaktifkan pada waktu boot, seluruh komputer akan masuk ke debugger kernel. Jika debugger kernel tidak terpasang, komputer akan membeku dan menunggu debugger kernel.

  3. Jika debugger mode pengguna tidak terpasang, dan debug mode kernel tidak diaktifkan, program akan berhenti dengan pengecualian yang tidak teratasi, dan debugger pasca-mortem (just-in-time) akan diaktifkan. Untuk informasi selengkapnya, lihat Mengaktifkan Pelacakan Kesalahan Setelah Kejadian.

Kernel-Mode Memecah Rutinitas

Ketika program mode kernel masuk ke debugger, seluruh sistem operasi membeku hingga debugger kernel memungkinkan eksekusi untuk dilanjutkan. Jika tidak ada debugger kernel yang ada, ini diperlakukan sebagai pemeriksaan bug.

Rutinitas DbgBreakPoint berfungsi dalam kode mode kernel, tetapi sebaliknya mirip dengan rutinitas mode pengguna DebugBreak .

Rutinitas DbgBreakPointWithStatus juga menyebabkan jeda, tetapi juga mengirim kode status 32-bit ke debugger.

Rutinitas KdBreakPoint dan KdBreakPointWithStatus identik dengan DbgBreakPoint dan DbgBreakPointWithStatus, masing-masing, saat dikompilasi di lingkungan build yang diperiksa. Ketika dikompilasi di lingkungan build gratis, mereka tidak berpengaruh.

Kernel-Mode Rutinitas Pemutusan Bersyarat

Dua rutinitas pemutusan kondisi tersedia untuk kode mode kernel. Rutinitas ini menguji ekspresi logis. Jika ekspresi salah, eksekusi berhenti dan debugger menjadi aktif.

  • Makro ASSERT menguji ekspresi logis. Jika ekspresi salah, eksekusi berhenti dan debugger menjadi aktif. Ekspresi yang gagal dan lokasinya dalam program ditampilkan di debugger.

  • Makro ASSERTMSG identik dengan ASSERT kecuali memungkinkan pesan tambahan dikirim ke debugger.

ASSERT dan ASSERTMSG hanya aktif saat dikompilasi di lingkungan build yang diperiksa. Ketika dikompilasi di lingkungan build gratis, mereka tidak berpengaruh.