Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Условные точки останова в WinDbg и других отладчиках Windows полезны, когда нужно остановить выполнение программы только в том случае, если выполнено определенное условие.
С помощью параметра "/w" создается условная точка останова с помощью команды bp (Установить точку останова) или другой команды точки останова. Базовый синтаксис команды:
0:000> bp /w "(Condition)" Address
Точка останова приведет к срабатыванию в отладчике только при выполнении указанного условия. "w" — это сокращение для "когда". Выражение условия может представлять собой любое выражение, которое можно использовать с командой dx (Display Debugger Object Model Expression — выражение объектной модели отладчика). Это включает в себя большинство выражений стиля C++, включая сравнения, арифметические операции, операции указателя и другие. Например, базовая условная точка останова, которая прерывается только в том случае, если переменная более 20 может быть записана следующим образом:
0:000> bp /w "MyVar > 20" `mysource.cpp:143`
Так как условие оценивается с помощью объектной модели отладчика, вы также можете воспользоваться преимуществами поддержки NatVis. Например, предполагая, что myVec — это std::vector<int>, можно создать условие, такое как:
0:000> bp /w "myVec.Count() == 4" `mysource.cpp:143`
Поломка произойдет при выполнении строки 143 в mysource.cpp, если переменная myVec будет иметь 4 элемента.
Кроме natvis, можно также вызвать функцию JavaScript. Если вы загружаете скрипт с помощью окна скрипта WinDbg или команды .scriptload (Load Script), содержащей функцию myFunc, можно задать точку останова следующим образом:
0:000> bp /w "@$scriptContents.myFunc()" `mysource.cpp:143`
Дополнительные сведения о написании функций и расширений JavaScript в отладчике см. в статье "Скрипты отладчика JavaScript"
Хотя выражения более высокого уровня, как правило, наиболее полезны, можно также оценить регистры с помощью этих выражений. Например, можно создать точку останова, которая активирует только при достижении определенного порогового значения указателя стека:
0:000> bp /w "@esp < 0x6ff9f8" `mysource.cpp:143`
Старый синтаксис условной точки останова
До того, как стал доступен параметр "/w" в командах точки останова, рекомендованным способом задания условных точек останова было использование команды j (Execute If - Else) или маркера .if, а затем команды gc (Переход от условной точки останова). Хотя эти методы настройки условных точек останова больше не рекомендуются, они по-прежнему работают, и вы можете увидеть этот синтаксис, который упоминается в других источниках.
Базовый синтаксис условной точки останова с помощью команды j выглядит следующим образом:
0:000> bp Address "j (Condition) 'OptionalCommands'; 'gc' "
Базовый синтаксис для условной точки останова с помощью маркера .if выглядит следующим образом:
0:000> bp Address ".if (Condition) {OptionalCommands} .else {gc}"