Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Podmíněná body přerušení ve WinDbg a dalších debuggerech systému Windows jsou užitečná, pokud potřebujete přerušení pouze v případě, že je splněna určitá podmínka.
Podmíněná zarážka se vytvoří s parametrem "/w" k příkazu bp (Set Breakpoint) nebo jinému příkazu zarážky. Základní syntaxe příkazu je:
0:000> bp /w "(Condition)" Address
Zarážka způsobí přerušení ladicího programu pouze v případech, kdy je zadaná podmínka pravdivá. "w" je zkratka pro "when". Výraz podmínky může být cokoli, co lze použít s příkazem dx (Display Debugger Object Model Expression). To zahrnuje většinu výrazů stylu jazyka C++, včetně porovnání, aritmetických operací, operací ukazatele a dalších výrazů. Například základní podmíněná zarážka, která se zastaví pouze v případě, že je proměnná větší než 20, může být zapsána takto:
0:000> bp /w "MyVar > 20" `mysource.cpp:143`
Vzhledem k tomu, že je podmínka vyhodnocena pomocí objektového modelu ladicího programu, můžete také využít výhod, jako je podpora NatVis. Například za předpokladu, že myVec je std::vector<int> , můžete vytvořit podmínku, například:
0:000> bp /w "myVec.Count() == 4" `mysource.cpp:143`
To se přeruší, když se spustí řádek 143 mysource.cpp, zatímco proměnná myVec má 4 prvky.
Kromě natvis můžete také vyvolat funkci JavaScriptu. Pokud načtete skript pomocí okna skriptu WinDbg nebo příkazu .scriptload (Load Script), který obsahuje funkci s názvem myFunc, můžete nastavit zarážku takto:
0:000> bp /w "@$scriptContents.myFunc()" `mysource.cpp:143`
Další informace o psaní javascriptových funkcí a rozšíření v ladicím programu najdete v tématu Skriptování ladicího programu Jazyka JavaScript.
I když výrazy vyšší úrovně jsou obvykle nejužitečnější, je také možné pomocí těchto výrazů vyhodnotit registry. Můžete například vytvořit bod přerušení, který se aktivuje pouze když ukazatel zásobníku dosáhne určité prahové hodnoty.
0:000> bp /w "@esp < 0x6ff9f8" `mysource.cpp:143`
Starší syntaxe podmíněné zarážky
Před dostupností parametru /w pro příkazy zarážky bylo doporučeným způsobem nastavení podmíněných zarážek použít příkaz j (Execute If - Else) nebo token .if následovaný příkazem gc (Přejít z podmíněné zarážky). I když se tyto metody nastavení podmíněných zarážek už nedoporučují, fungují i nadále a tato syntaxe se může zobrazovat v jiných zdrojích.
Základní syntaxe pro podmíněný bod přerušení pomocí příkazu j je následující:
0:000> bp Address "j (Condition) 'OptionalCommands'; 'gc' "
Základní syntaxe podmíněné zarážky pomocí tokenu .if je následující:
0:000> bp Address ".if (Condition) {OptionalCommands} .else {gc}"