Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
При создании точки останова можно использовать следующие элементы синтаксиса с помощью окна команды отладчика или графического интерфейса 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 и более поздних версиях движка отладчика теперь поддерживается разрешение неоднозначных точек останова. Неоднозначные точки останова позволяют отладчику задавать точки останова в определенных сценариях, когда выражение точки останова разрешается в несколько расположений. Дополнительные сведения см. в разделе "Неоднозначное разрешение точек останова".