Поделиться через


Синтаксис точки останова

При создании точки останова можно использовать следующие элементы синтаксиса с помощью окна команды отладчика или графического интерфейса 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).

Более универсальный метод — использовать синтаксис @!"символы". Это специальный механизм экранирования в вычислителе 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="

В этом примере Имя исполняемого файла — это имя исполняемого файла.

Этот синтаксис escape-кода более полезен для C++ (например, перегруженных операторов) вместо C, так как в именах функций C нет пробелов (или специальных символов). Однако этот синтаксис также важен для большого количества управляемого кода из-за значительного использования перегрузки в .NET Framework.

Чтобы задать точку останова для произвольного текста в синтаксисе C++, используйте bu @@c++(text) для символов, совместимых с C++.

Точки останова в скриптах

Идентификаторы точек останова не обязательно должны упоминаться явно. Вместо этого можно использовать числовое выражение, которое вычисляется в целое число, соответствующее идентификатору точки останова. Чтобы указать, что выражение должно быть интерпретировано как точка останова, используйте следующий синтаксис.

b?[Expression]

В этом синтаксисе необходимы квадратные скобки, а выражение — любое числовое выражение, превращающееся в целое число, соответствующее идентификатору точки останова.

Этот синтаксис позволяет скриптам отладчика программно выбрать точку останова. В следующем примере точка останова изменяется в зависимости от значения определяемого пользователем псевдорегистрирующего регистра.

b?[@$t0]

Псевдорегистры точек останова

Если вы хотите ссылаться на адрес точки останова в выражении, можно использовать псевдорегистрирующий регистр с синтаксисом $bpNumber , где Число — это идентификатор точки останова. Для получения дополнительных сведений об этом синтаксисе см. Pseudo-Register Syntax.

Неоднозначность в решении точек останова

В версии 10.0.25310.1001 и более поздних версиях движка отладчика теперь поддерживается разрешение неоднозначных точек останова. Неоднозначные точки останова позволяют отладчику задавать точки останова в определенных сценариях, когда выражение точки останова разрешается в несколько расположений. Дополнительные сведения см. в разделе "Неоднозначное разрешение точек останова".

См. также

использование точек останова

bp, bu, bm (Установка точки останова)

Неразрешенные точки останова (бу точки останова)