Синтаксис точки останова
Приведенные ниже элементы синтаксиса можно использовать при создании точки останова в окне команд отладчика или графическом интерфейсе WinDbg.
Адреса в точках останова
Точки останова поддерживают различные виды синтаксиса адресов, включая виртуальные адреса, смещения функций и номера строк источника. Например, для задания точек останова можно использовать любую из следующих команд:
0:000> bp 0040108c
0:000> bp main+5c
0:000> bp `source.c:31`
Дополнительные сведения об этом синтаксисе см. в разделах Синтаксис числовых выражений, Синтаксис исходной строки и отдельные команды.
Точки останова в методах
Если вы хотите поставить точку останова в методе MyMethod в классе MyClass , можно использовать два разных синтаксиса:
В синтаксисе выражений MASM метод можно указать двойным двоеточием или двойным подчеркиванием.
0:000> bp MyClass::MyMethod 0:000> bp MyClass__MyMethod
В синтаксисе выражений C++ метод необходимо указать двойным двоеточием.
0:000> bp @@( MyClass::MyMethod )
Если вы хотите использовать более сложную команду точки останова, следует использовать синтаксис выражений MASM. Дополнительные сведения о синтаксисе выражений см. в разделе Вычисление выражений.
Точки останова с использованием сложных выражений MASM
Чтобы задать точку останова для сложных функций, включая функции, содержащие пробелы, а также член открытого класса C++, заключите выражение в круглые скобки. Например, используйте bp (?? MyPublic) или bp (оператор new).
Более универсальным методом является использование @!" синтаксис chars". Это специальный escape-экран в оценщике MASM, который позволяет предоставлять произвольный текст для разрешения символов. Необходимо начать с трех символов @!" и заканчиваться кавычками ("). Без этого синтаксиса нельзя использовать пробелы, угловые скобки (<, >) или другие специальные символы в именах символов в вычислителя MASM. Этот синтаксис предназначен исключительно для имен, а не для параметров. Шаблоны и перегрузки являются основными источниками символов, для которых требуется нотация в кавычках. Вы также можете задать команду bu с помощью @!" Синтаксис chars", как показано в следующем примере кода.
0:000> bu @!"ExecutableName!std::pair<unsigned int,std::basic_string<unsigned short,std::char_traits<unsigned short>,std::allocator<unsigned short> > >::operator="
В этом примере ExecutableName — это имя исполняемого файла.
Этот escape-синтаксис более удобен для C++ (например, перегруженных операторов) вместо C, так как в именах функций C нет пробелов (или специальных символов). Однако этот синтаксис также важен для большого количества управляемого кода из-за значительного использования перегрузок в платформа .NET Framework.
Чтобы задать точку останова для произвольного текста в синтаксисе C++, используйте bu @@c++(text) для символов, совместимых с C++.
Точки останова в скриптах
На идентификаторы точек останова не нужно ссылаться явным образом. Вместо этого можно использовать числовое выражение, которое разрешается в целое число, соответствующее идентификатору точки останова. Чтобы указать, что выражение должно интерпретироваться как точка останова, используйте следующий синтаксис.
b?[Expression]
В этом синтаксисе квадратные скобки являются обязательными, а выражение означает любое числовое выражение, которое разрешается в целое число, соответствующее идентификатору точки останова.
Этот синтаксис позволяет скриптам отладчика программно выбирать точку останова. В следующем примере точка останова изменяется в зависимости от значения определяемого пользователем псевдорегистра.
b?[@$t0]
Псевдорегистры точек останова
Если вы хотите ссылаться на адрес точки останова в выражении, можно использовать псевдорегистрару с синтаксисом $bpNumber , где Number — это идентификатор точки останова. Дополнительные сведения об этом синтаксисе см. в разделе Синтаксис Pseudo-Register.
Неоднозначное разрешение точек останова
В отладчике версии 10.0.25310.1001 и более поздних версиях поддерживается неоднозначное разрешение точек останова. Неоднозначные точки останова позволяют отладчику задавать точки останова в определенных сценариях, где выражение точки останова разрешается в несколько расположений. Дополнительные сведения см. в разделе Неоднозначное разрешение точек останова.