Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Warunkowe punkty przerwania w systemie WinDbg i innych debugerach systemu Windows są przydatne, gdy trzeba przerwać tylko wtedy, gdy określony warunek jest spełniony.
Warunkowy punkt przerwania jest tworzony za pomocą parametru "/w" do narzędzia bp (Ustaw punkt przerwania) lub innego polecenia punktu przerwania. Podstawowa składnia polecenia to:
0:000> bp /w "(Condition)" Address
Punkt przerwania spowoduje przerwanie w debugerze tylko wtedy, gdy określony warunek jest prawdziwy. "w" to skrót od angielskiego słowa "when". Wyrażenie warunku może być dowolne, którego można użyć za pomocą polecenia dx (Display Debugger Object Model Expression). Obejmuje to większość wyrażeń stylu języka C++, w tym porównania, arytmetyczne, operacje wskaźnika i inne. Na przykład podstawowy warunkowy punkt przerwania, który przerywa działanie tylko wtedy, gdy zmienna jest większa niż 20, może być zapisywana jako:
0:000> bp /w "MyVar > 20" `mysource.cpp:143`
Ponieważ warunek jest oceniany przy użyciu modelu obiektów debugera, możesz również skorzystać z takich funkcji jak obsługa NatVis. Na przykład przy założeniu, że myVec jest elementem std::vector<int>, można utworzyć warunek, taki jak:
0:000> bp /w "myVec.Count() == 4" `mysource.cpp:143`
Spowoduje to przerwanie po wykonaniu wiersza 143 mysource.cpp, gdy zmienna myVec ma 4 elementy.
Poza natvis można również wywołać funkcję JavaScript. Jeśli załadujesz skrypt przy użyciu okna skryptu WinDbg lub polecenia .scriptload (Załaduj skrypt), które zawiera funkcję o nazwie "myFunc", możesz ustawić punkt przerwania w następujący sposób:
0:000> bp /w "@$scriptContents.myFunc()" `mysource.cpp:143`
Aby uzyskać więcej informacji na temat pisania funkcji i rozszerzeń Języka JavaScript w debugerze, zobacz JavaScript Debugger Scripting (Skrypty debugera języka JavaScript)
Chociaż wyrażenia wyższego poziomu są zwykle najbardziej przydatne, możliwe jest również obliczenie rejestrów przy użyciu tych wyrażeń. Można na przykład utworzyć punkt przerwania, który jest wyzwalany tylko wtedy, gdy wskaźnik stosu osiągnie pewien próg:
0:000> bp /w "@esp < 0x6ff9f8" `mysource.cpp:143`
Starsza składnia punktu przerwania warunkowego
Przed udostępnieniem parametru "/w" dla poleceń punktów przerwania zalecanym sposobem ustawienia warunkowych punktów przerwania było użycie polecenia j (Wykonaj jeśli - Else) lub .if, a następnie polecenia gc (Przejdź z warunkowego punktu przerwania). Chociaż te metody ustawiania warunkowych punktów przerwania nie są już zalecane, nadal działają i ta składnia może być widoczna w innych źródłach.
Podstawowa składnia warunkowego punktu przerwania przy użyciu polecenia j jest następująca:
0:000> bp Address "j (Condition) 'OptionalCommands'; 'gc' "
Podstawowa składnia warunkowego punktu przerwania przy użyciu tokenu .if jest następująca:
0:000> bp Address ".if (Condition) {OptionalCommands} .else {gc}"