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


Оператор контекста в отладчике Visual Studio (C++)

Оператор контекста в C++ можно использовать для уточнения имени переменной, выражения или расположения точки останова. С помощью оператора контекста можно указать имя из внешней области, чтобы это имя не оказалось перекрыто локальным именем.

Синтаксис

Указать контекст можно двумя способами:

  1. {,,[модуль] } выражение

    Фигурные скобки должны содержать две запятые и имя либо полный путь к модулю (исполняемому файлу или DLL-файлу).

    Например, чтобы задать точку останова SomeFunction в функции EXAMPLE.dll:

    {,,EXAMPLE.dll}SomeFunction
    
  2. модуль!выражение

    EXAMPLE.dll!SomeFunction
    
  • модуль — это имя модуля. В имени модуля можно указывать полный путь во избежание неоднозначности указания модулей с одинаковыми именами.

    Если путь модуль содержит запятую, внутренний пробел или фигурную скобку, такой путь необходимо заключить в кавычки, чтобы средство синтаксического анализа контекста смогло правильно распознать строку. Одинарные кавычки воспринимаются как часть имени файла Windows, поэтому для этой цели должны использоваться двойные кавычки. Например,

    {,,"a long, long, library name.dll"} g_Var
    
  • выражение — это любое допустимое выражение C++, результатом которого является допустимый целевой объект, например имя функции, имя переменной или адрес указателя в модуле.

    Когда вычислитель выражений встречает в выражении символ, он ищет его в следующем порядке:

  1. В лексической области и за ее пределами, начиная с текущего блока (последовательности операторов, заключенной в фигурные скобки) и затем переходя к внешнему блоку, содержащему текущий. Текущий блок — это код, содержащий текущее расположение, адрес указателя инструкции.

  2. Область видимости функции. Текущая функция.

  3. В области видимости класса, если текущее расположение находится внутри функции-члена языка C++. Область видимости класса включает все базовые классы. Вычислитель выражений использует обычные правила доминирования.

  4. Глобальные символы в текущем модуле.

  5. Открытые символы в текущей программе.