Mengeksekusi Hingga Status Yang Ditentukan Tercapai

Ada beberapa cara untuk menyebabkan target dijalankan hingga status tertentu tercapai.

Menggunakan Titik Henti untuk Mengontrol Eksekusi

Salah satu metodenya adalah menggunakan titik henti. Titik henti paling sederhana menghentikan eksekusi ketika penghitung program mencapai alamat tertentu. Titik henti yang lebih kompleks dapat:

  • dipicu hanya ketika alamat ini dijalankan oleh utas tertentu,

  • izinkan jumlah yang ditentukan melewati alamat ini sebelum dipicu,

  • secara otomatis mengeluarkan perintah tertentu saat dipicu, atau

  • watch alamat tertentu dalam memori yang tidak dapat dieksekusi, dipicu ketika memori tersebut dibaca atau ditulis.

Untuk detail tentang cara mengatur dan mengontrol titik henti, lihat Menggunakan Titik Henti.

Cara yang lebih rumit untuk mengeksekusi hingga status tertentu tercapai adalah dengan menggunakan titik henti kondisional. Titik henti semacam ini diatur pada alamat tertentu, tetapi hanya dipicu jika kondisi tertentu bertahan. Untuk detailnya, lihat Mengatur Titik Henti Bersyarah.

Titik henti dan Pseudo-Registers

Dalam menentukan status yang diinginkan, seringkali berguna untuk menggunakan pseudo-register otomatis. Ini adalah variabel yang dikontrol oleh debugger yang memungkinkan Anda mereferensikan berbagai nilai yang terkait dengan status target.

Misalnya, titik henti berikut menggunakan $thread pseudo-register, yang selalu sama dengan nilai utas saat ini. Ini diselesaikan ke nilai utas saat ini ketika digunakan dalam perintah. Dengan menggunakan $thread sebagai argumen parameter /t dari perintah bp (Set Breakpoint), Anda dapat membuat titik henti yang akan dipicu setiap kali NtOpenFile dipanggil oleh utas yang aktif pada saat Anda mengeluarkan perintah bp :

kd> bp /t @$thread nt!ntopenfile

Titik henti ini tidak akan dipicu ketika utas lain memanggil NtOpenFile.

Untuk daftar pseudo-register otomatis, lihat Sintaks Pseudo-Register.

Menggunakan File Skrip untuk Mengontrol Eksekusi

Cara lain untuk mengeksekusi hingga status tertentu tercapai adalah dengan membuat file skrip yang memanggil dirinya secara rekursif, menguji status yang diinginkan di setiap perulangan.

Biasanya, file skrip ini akan berisi token .if dan .else . Anda dapat menggunakan perintah seperti t (Jejak) untuk menjalankan satu langkah, lalu menguji kondisi yang dimaksud.

Misalnya, jika Anda ingin mengeksekusi hingga register eax berisi nilai 0x1234, Anda dapat membuat file skrip yang disebut eaxstep yang berisi baris berikut:

.if (@eax == 1234) { .echo 1234 } .else { t "$<eaxstep" }

Kemudian terbitkan perintah berikut dari jendela Perintah Debugger:

t "$<eaxstep"

Perintah t ini akan menjalankan satu langkah, lalu menjalankan perintah yang dikutip. Perintah ini kebetulan $< (Jalankan File Skrip), yang menjalankan file eaxstep . File skrip menguji nilai eax, menjalankan perintah t , lalu memanggil dirinya secara rekursif. Ini berlanjut sampai register eax sama dengan 0x1234, di mana perintah .echo (Echo Comment) mencetak pesan ke jendela Perintah Debugger, dan eksekusi berhenti.

Untuk detail tentang file skrip, lihat Menggunakan File Skrip dan Menggunakan Program Perintah Debugger.

Resolusi titik henti ambigu

Dalam versi 10.0.25310.1001 dan yang lebih baru dari mesin debugger, resolusi titik henti ambigu sekarang didukung. Titik henti ambigu memungkinkan debugger mengatur titik henti dalam skenario tertentu di mana ekspresi titik henti diselesaikan ke beberapa lokasi. Untuk informasi selengkapnya, lihat Resolusi titik henti ambigu.

Lihat juga

Menggunakan Titik Henti

Sintaks Titik Henti

bp, bu, bm (Atur Titik Henti)

Resolusi titik henti ambigu

Titik Henti Tidak Terselesaikan (bu Titik Henti)