Titik henti kondisional di WinDbg dan debugger Windows lainnya

Titik henti kondisional di WinDbg dan debugger Windows lainnya berguna ketika Anda perlu masuk hanya jika kondisi tertentu terpenuhi.

Titik henti bersyar dibuat dengan parameter "/w" ke bp (Atur Titik Henti) atau perintah titik henti lainnya. Sintaks dasar perintah adalah:

0:000> bp /w "(Condition)" Address

Titik henti hanya akan menyebabkan pemecahan masalah ke debugger ketika kondisi yang ditentukan benar. "w" adalah singkatan dari "kapan". Ekspresi kondisi dapat berupa apa pun yang dapat digunakan dengan perintah dx (Ekspresi Model Objek Debugger Tampilan). Ini termasuk sebagian besar ekspresi gaya C++ termasuk perbandingan, aritmatika, operasi penunjuk, dan lainnya. Misalnya, titik henti kondisi dasar yang hanya memecah ketika variabel lebih dari 20 dapat ditulis sebagai:

0:000> bp /w "MyVar > 20" `mysource.cpp:143`

Karena kondisi dievaluasi menggunakan model objek debugger, Anda juga dapat memanfaatkan hal-hal seperti dukungan NatVis. Misalnya, dengan asumsi myVec adalah std::vector<int>, Anda dapat membuat kondisi seperti:

0:000> bp /w "myVec.Count() == 4" `mysource.cpp:143`

Ini akan pecah ketika baris 143 mysource.cpp dijalankan sementara variabel myVec memiliki 4 elemen.

Selain natvis, Anda juga dapat memanggil fungsi JavaScript. Jika Anda memuat skrip menggunakan jendela skrip WinDbg atau perintah .scriptload (Load Script) yang berisi fungsi yang disebut "myFunc", Anda dapat mengatur titik henti seperti ini:

0:000> bp /w "@$scriptContents.myFunc()" `mysource.cpp:143`

Untuk informasi selengkapnya tentang menulis fungsi dan ekstensi JavaScript di debugger, lihat Pembuatan Skrip JavaScript Debugger

Meskipun ekspresi tingkat yang lebih tinggi biasanya paling berguna, dimungkinkan juga untuk mengevaluasi register menggunakan ekspansi ini. Misalnya, Anda dapat membuat titik henti yang hanya memicu ketika penunjuk tumpukan mencapai beberapa ambang batas:

0:000> bp /w "@esp < 0x6ff9f8" `mysource.cpp:143`

Sintaks titik henti bersyar warisan

Sebelum ketersediaan parameter "/w" ke perintah titik henti, cara yang disarankan untuk mengatur titik henti kondisional adalah dengan menggunakan perintah j (Execute If - Else) atau token .if , diikuti oleh perintah gc (Go from Conditional Breakpoint ). Meskipun metode pengaturan titik henti bersyukur ini tidak lagi disarankan, metode tersebut masih berfungsi dan Anda mungkin melihat sintaks ini direferensikan di sumber lain.

Sintaks dasar untuk titik henti bersyarah menggunakan perintah j adalah sebagai berikut:

0:000> bp Address "j (Condition) 'OptionalCommands'; 'gc' "

Sintaks dasar untuk titik henti bersyarah menggunakan token .if adalah sebagai berikut:

0:000> bp Address ".if (Condition) {OptionalCommands} .else {gc}"