Feltételes töréspontok a WinDbg-ben és más Windows-hibakeresőkben

A WinDbg és más Windows hibakeresők feltételes töréspontjai akkor hasznosak, ha a programnak csak egy adott feltétel teljesülése esetén kell megállnia.

A rendszer létrehoz egy feltételes töréspontot a "/w" paraméterrel a bp (Breakpoint beállítása) vagy más töréspont-parancs számára. A parancs alapszintaxisa:

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

A töréspont csak akkor okoz törést a hibakeresőben, ha a megadott feltétel igaz. A "w" a "mikor" rövidítése. A feltételkifejezés bármi lehet, amely használható a dx (Display Debugger Object Model Expression) paranccsal. Ez magában foglalja a legtöbb C++ stíluskifejezést, beleértve az összehasonlításokat, az aritmetikai, a mutatóműveleteket és másokat. Például egy alapszintű feltételes töréspont, amely csak akkor törik meg, ha egy változó 20-nál több, a következőképpen írható:

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

Mivel a feltétel kiértékelése a hibakereső objektummodellel történik, a NatVis-támogatáshoz hasonló lehetőségeket is kihasználhat. Például, ha feltételezzük, hogy a myVec egy std::vector<int>, létrehozhat egy olyan feltételt, mint például:

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

Ez hibát okoz, amikor a mysource.cpp 143. sora fut, és a myVec változó 4 elemből áll.

A Natvison kívül JavaScript-függvényeket is meghívhat. Ha egy szkriptet a WinDbg szkriptablakával vagy a "myFunc" nevű függvényt tartalmazó .scriptload (Load Script) paranccsal tölt be, az alábbihoz hasonló töréspontot állíthat be:

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

További információ a JavaScript-függvények és -bővítmények hibakeresőben való írásáról: JavaScript Debugger Scripting

Bár a magasabb szintű kifejezések általában a leg hasznosak, a regiszterek kiértékelése is lehetséges ezekkel a kifejezésekkel. Létrehozhat például egy töréspontot, amely csak akkor aktiválódik, ha a veremmutató eléri a küszöbértéket:

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

Örökölt feltételes töréspont szintaxisa

Mielőtt a "/w" paraméter elérhető lett volna a töréspont-parancsokhoz, a feltételes töréspontok beállításának ajánlott módja a j (Execute If - Else) parancs vagy a .if jogkivonat, majd a gc (Ugrás a feltételes töréspontról) parancs használata volt. Bár a feltételes töréspontok beállításának ezen módszerei már nem ajánlottak, továbbra is működnek, és más forrásokban is hivatkozhat erre a szintaxisra.

A j parancsot használó feltételes töréspontok alapszintaxisa a következő:

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

A .if token használatával feltételes töréspontok alapszintaxisa a következő:

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