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


Просмотр переменных с окнами наблюдения и QuickWatch

При отладке можно использовать окна "Контрольные " и "Быстрые часы " для просмотра переменных и выражений. Окна доступны только во время сеанса отладки.

Окна просмотра могут отображать несколько переменных во время отладки. Диалоговое окно QuickWatch отображает одну переменную за раз и должно быть закрыто перед продолжением отладки. Дополнительные сведения об использовании QuickWatch см. в разделе "Наблюдение за одной переменной или выражением" с помощью QuickWatch.

Замечание

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

Наблюдение за переменными с помощью окна "Контроль"

Вы можете открыть несколько окон "Контрольные значения " и наблюдать за несколькими переменными в окне "Контрольные значения ".

Например, чтобы задать контроль над значениями a, bи c в следующем коде:

int main()
{
    int a, b, c;
    a = 1;
    b = 2;
    c = 0;

    for (int i = 0; i < 10; i++)
    {
        a++;
        b *= 2;
        c = a + b;
    }

    return 0;
}

  1. Установите точку останова в c = a + b; строке, щелкнув в левом поле, выбрав Отладка>Переключить точку останова или нажав F9.

  2. Начните отладку, выбрав зеленую стрелку "Пуск" или> "Начать отладку" или нажмите клавишу F5. Выполнение приостанавливается в точке останова.

  3. Откройте окно "Watch", выбрав "Отладка>Windows>Watch>1" или нажав CTRL+ALT+W>1.

    Вы можете открыть дополнительные окна просмотра , выбрав окна 2, 3 или 4.

  4. В окне "Контроль " выберите пустую строку и введите переменную a. Сделайте то же самое для b и c.

    Снимок экрана: переменная в окне

    Снимок экрана: переменные Watch.

  5. Продолжайте отладку, выбрав Отладка>Шаг Войти или нажав F11 при необходимости для продолжения. Значения переменных в окне Наблюдение изменяются по мере итерации цикла for.

Замечание

Только для C++

  • Возможно, потребуется указать контекст имени переменной или выражение, использующее имя переменной. Контекст — это функция, исходный файл или модуль, в котором находится переменная. Если необходимо указать контекст, используйте синтаксис оператора контекста (C++) в Имя окна Просмотр.

  • Вы можете добавить имена регистров и имена переменных с помощью $имя регистра или @имя регистра в окно"Наблюдение". Дополнительные сведения см. в разделе "Псевдоварианты".

Использование выражений в окне "Наблюдение"

Вы можете наблюдать любое допустимое выражение, распознаемое отладчиком в окне "Контроль ".

Например, для кода, приведенного в предыдущем разделе, можно получить среднее значение трех значений, введя (a + b + c) / 3 в окне контрольных значений :

Снимок экрана выражения в окне 'Просмотр'.

Скриншот выражения

Правила оценки выражений в окне Watch обычно совпадают с правилами для оценки выражений на языке кода. Если выражение имеет синтаксическую ошибку, ожидается та же ошибка компилятора, что и в редакторе кода. Например, опечатка в приведённом выше выражении вызывает эту ошибку в окне «Просмотр»:

Снимок экрана: ошибка в окне

Снимок экрана: ошибка выражения

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

Поиск в окне "Наблюдения"

Ключевые слова можно найти в столбцах "Имя", "Значение" и "Тип" окна "Watch", используя панель поиска над каждым из этих окон. Нажмите клавишу ВВОД или выберите одну из стрелок для выполнения поиска. Чтобы отменить текущий поиск, щелкните значок "x" в строке поиска.

Используйте клавиши со стрелками влево и вправо (Shift+F3 и F3 соответственно) для навигации между найденными совпадениями.

Снимок экрана: поиск в окне

Чтобы сделать поиск более или менее тщательным, используйте раскрывающийся список Глубина поиска в верхней части окна Мониторинг, чтобы выбрать количество уровней для поиска во вложенных объектах.

Закрепление свойств в окне "Наблюдение"

Замечание

Эта функция поддерживается в .NET Core 3.0 или более поздней версии.

Вы можете быстро проверить объекты по их свойствам в окне "Просмотр" с помощью инструмента "Закрепленные свойства". Чтобы использовать это средство, наведите указатель мыши на свойство и выберите значок закрепления, который появляется, или щелкните правой кнопкой мыши и выберите пункт Закрепить как избранное в результирующем контекстном меню. Это действие перемещает это свойство наверх списка свойств объекта, и имя и значение свойства отображаются в столбце «Value». Чтобы открепить свойство, щелкните значок закрепления ещё раз или выберите пункт Открепить участника как избранное в контекстном меню.

Снимок экрана: закрепление свойств в окне

Вы также можете изменять имена свойств и фильтровать не закреплённые свойства при просмотре списка свойств объекта в окне отслеживания. Вы можете получить доступ к обоим параметрам, выбрав кнопки на панели инструментов над окном просмотра.

Поиск в окне "Наблюдения"

Ключевые слова можно найти в столбцах "Имя", "Значение" и "Тип" окна "Watch", используя панель поиска над каждым из этих окон. Нажмите клавишу ВВОД или выберите одну из стрелок для выполнения поиска. Чтобы отменить текущий поиск, щелкните значок "x" в строке поиска.

Используйте клавиши со стрелками влево и вправо (Shift+F3 и F3 соответственно) для навигации между найденными совпадениями.

Снимок экрана: поиск в окне

Чтобы сделать ваш поиск более или менее детальным, используйте выпадающий список "Углубленный поиск" в верхней части окна 'Watch', чтобы выбрать, на сколько уровней вложенности вы хотите углубиться в объектах.

Закрепление свойств в окне "Наблюдение"

Замечание

Эта функция поддерживается в .NET Core 3.0 или более поздней версии.

Вы можете быстро проверить объекты по их свойствам в окне "Просмотр" с помощью инструмента "Закрепленные свойства". Чтобы использовать это средство, наведите указатель мыши на свойство и выберите значок закрепления, который появляется, или щелкните правой кнопкой мыши и выберите пункт Закрепить как избранное в результирующем контекстном меню. Это действие перемещает это свойство наверх списка свойств объекта, и имя и значение свойства отображаются в столбце «Value». Чтобы открепить свойство, щелкните значок закрепления ещё раз или выберите пункт Открепить участника как избранное в контекстном меню.

Снимок экрана: закрепление свойств в окне

Вы также можете изменять имена свойств и фильтровать не закреплённые свойства при просмотре списка свойств объекта в окне отслеживания. Вы можете получить доступ к обоим параметрам, выбрав кнопки на панели инструментов над окном просмотра.

Обновление значений часов

Значок обновления (циклическая стрелка) может отображаться в окне "Контроль " при вычислении выражения. Значок обновления указывает на ошибку или значение, которое устарело.

Чтобы обновить значение, выберите значок обновления или нажмите пробел. Отладчик пытается переоценить выражение. Тем не менее, возможно, вы не захотите или не сможете переоценить выражение в зависимости от причины, по которой значение не было оценено.

Наведите указатель мыши на значок обновления или посмотрите в столбец Значение, чтобы узнать, почему выражение не было вычислено. Ниже перечислены причины:

  • Произошла ошибка при вычислении выражения, как показано в предыдущем примере. Может возникнуть таймаут или переменная может быть не в области действия.

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

  • Автоматическая оценка свойств и неявных вызовов функций отключена.

Если появится значок обновления, так как автоматическая оценка свойств и неявные вызовы функций отключены, можно обновить параметр отладки в меню"Параметры>".

Чтобы продемонстрировать, как использовать значок обновления:

  1. В области инструментов (или отладки) параметры, в подразделе все параметрыотладкиобщие, снимите флажок Включить оценку свойств и другие неявные вызовы функций.
  1. В диалоговом окне "Средства" (или "Отладка") >"Параметры", в разделе "Отладка">"Общие", снимите флажок "Включить оценку свойств и другие неявные вызовы функций".
  1. Введите следующий код и в окне Наблюдения установите наблюдение за свойством list.Count.

    static void Main(string[] args)
    {
        List<string> list = new List<string>();
        list.Add("hello");
        list.Add("goodbye");
    }
    
  2. Начните отладку. В окне "Просмотр" отображается следующее сообщение:

    Скриншот, показывающий значок обновления.

    Снимок экрана: Refresh Watch.

  3. Чтобы обновить значение, выберите значок обновления или нажмите пробел. Отладчик повторно вычисляет выражение.

Побочные эффекты выражения

Оценка некоторых выражений может изменить значение переменной или в противном случае повлиять на состояние приложения. Например, при вычислении следующего выражения изменяется значение var1:

var1 = var2

Этот код может вызвать побочный эффект. Побочные эффекты могут усложнить отладку, изменив способ работы вашего приложения.

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

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

Одним из способов предотвращения обозначения побочных эффектов является отключение автоматической оценки функций. В диалоговом окне "Средства" (или "Отладка") >"Параметры", в разделе "Отладка">"Общие", снимите флажок "Включить оценку свойств и другие неявные вызовы функций".

Только для C#, при отключении вычисления свойств или неявных вызовов функций, можно принудительно выполнить вычисление, добавив модификатор формата ac в имя переменной в окне Обозреватель. См. описатели формата в C#.

Использование идентификаторов объектов в окне наблюдения (C# и Visual Basic)

Иногда требуется наблюдать за поведением определенного объекта. Например, может потребоваться отслеживать объект, на который ссылается локальная переменная после выхода этой переменной из области. В C# и Visual Basic можно создавать идентификаторы объектов для определенных экземпляров ссылочных типов и использовать их в окне Просмотр и в условиях точки останова. Идентификатор объекта создается службами отладки среды CLR и связан с объектом.

Замечание

Идентификаторы объектов создают слабые ссылки, которые не препятствуют удалению объекта сборщиком мусора. Они допустимы только для текущего сеанса отладки.

В следующем коде метод MakePerson() создает Person, используя локальную переменную:

class Person
{
    public Person(string name)
    {
        Name = name;
    }
    public string Name { get; set; }
}

public class Program
{
    static List<Person> _people = new List<Person>();
    public static void Main(string[] args)
    {
        MakePerson();
        DoSomething();
    }

    private static void MakePerson()
    {
        var p = new Person("Bob");
        _people.Add(p);
    }

    private static void DoSomething()
    {
        // more processing
         Console.WriteLine("done");
    }
}

Чтобы узнать имя Person в методе DoSomething(), можно добавить ссылку на Person идентификатор объекта в окне Просмотр.

  1. Установите точку останова в коде после того, как объект Person будет создан.

  2. Начните отладку.

  3. При приостановке выполнения в точке останова откройте окно "Локальные", выбрав "Отладить>локальные">.

  4. В окне "Локальные" щелкните переменную правой Person кнопкой мыши и выберите "Создать идентификатор объекта".

    Вы увидите знак доллара ($) плюс номер в окне "Локальные" , который является идентификатором объекта.

  5. Добавьте идентификатор объекта в окно "Просмотр ", щелкнув правой кнопкой мыши идентификатор объекта и выбрав "Добавить часы".

  6. Задайте другую точку останова в методе DoSomething() .

  7. Продолжить отладку. При приостановке выполнения в методе DoSomething() окно "Контроль " отображает Person объект.

    Если вы хотите просмотреть свойства объекта, например Person.Name, необходимо включить оценку свойств.

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

    В диалоговом окне"Средства" (или >") в разделе "Общие сведения об отладке>" установите флажок "Включить оценку свойств" и другие неявные вызовы функций.

Динамическое представление и окно "Просмотр"

Некоторые языки сценариев (например, JavaScript или Python ) используют динамическую или дактическую ввод, а .NET версии 4.0 и более поздних версий поддерживает объекты, которые трудно наблюдать в обычных окнах отладки.

В окне "Просмотр " эти объекты отображаются как динамические объекты, созданные из типов, реализующих IDynamicMetaObjectProvider интерфейс. Узлы динамических объектов показывают динамические члены динамических объектов, но не разрешают редактирование значений элементов.

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

Чтобы отобразить только динамическое представление для объекта, добавьте описатель динамического формата после имени динамического объекта в окне контрольных значений :

  • Для C#: ObjectName, dynamic
  • Для Visual Basic: $dynamic, ObjectName

Замечание

  • Отладчик C# не пересчитывает автоматически значения в динамическом представлении при переходе к следующей строке кода.
  • Отладчик Visual Basic автоматически обновляет выражения, добавленные через динамическое представление.
  • Оценка элементов динамического представления может иметь побочные эффекты.

Чтобы вставить новую переменную отслеживания, которая преобразует объект в динамический объект:

  1. Щелкните правой кнопкой мыши любой дочерний элемент динамического представления.
  2. Нажмите кнопку "Добавить часы". object.name становится ((dynamic) object).name и отображается в новом окне «Просмотр».

Отладчик также добавляет дочерний узел динамического представления объекта в окно автозапуска . Чтобы открыть окно "Автозапуск" , во время отладки выберите "Отладка>Windows>Autos".

Динамическое представление также улучшает отладку для COM-объектов. Когда отладчик попадает в COM-объект, упакованный в System.__ComObject, он добавляет узел Динамического представления для объекта.

Наблюдение за одной переменной или выражением с помощью QuickWatch

Для наблюдения за одной переменной можно использовать quickWatch .

Например, для следующего кода:

static void Main(string[] args)
{
    int a, b;
    a = 1;
    b = 2;
    for (int i = 0; i < 10; i++)
    {
        a = a + b;
    }
}

Чтобы наблюдать за переменной a ,

  1. Задайте точку останова в строке a = a + b;.

  2. Начните отладку. Выполнение приостанавливается в точке останова.

  3. Выберите переменную a в коде.

  4. Выберите "Отладить>quickWatch", нажмите клавиши SHIFT+F9 или щелкните правой кнопкой мыши и выберите QuickWatch.

    Откроется диалоговое окно QuickWatch . Переменная a находится в поле выражения со значением1.

    Снимок экрана: переменная в окне QuickWatch.

    Снимок экрана: переменная QuickWatch.

  5. Чтобы оценить выражение с помощью переменной, введите выражение, например a + b в поле "Выражение ", и выберите "Повторное вычисление".

    Снимок экрана: выражение в окне QuickWatch.

    Снимок экрана: выражение QuickWatch.

  6. Чтобы добавить переменную или выражение из QuickWatch в окно " Просмотр", нажмите кнопку "Добавить часы".

  7. Нажмите кнопку "Закрыть", чтобы закрыть окно QuickWatch . (QuickWatch — это модальное диалоговое окно, поэтому вы не сможете продолжить отладку до тех пор, пока она открыта.)

  8. Продолжить отладку. Переменную можно наблюдать в окне "Контроль ".

Получение помощи по искусственному интеллекту

Если у вас есть Copilot, вы можете спросить ИИ о переменных в окнах наблюдения.

  • Спросите Copilot о переменной. Щелкните переменную правой кнопкой мыши и выберите Ask CopilotСнимок экрана с кнопкой Ask Copilot.. В этом сценарии Copilot уже имеет контекст отладчика, поэтому его еще раз не нужно предоставлять в чате.

Дополнительные сведения см. в разделе Отладка с помощью Copilot.

Получение помощи по искусственному интеллекту

Если у вас Copilot, вы можете использовать ИИ в окнах Watch двумя способами:

  • Получение предложений по наблюдаемым выражениям. Начиная с Visual Studio 2026 версии 18.4, поместите курсор в пустую ячейку выражения часов в столбце Name . Copilot предлагает соответствующие выражения на основе текущего контекста отладки.
  • Спросите Copilot о переменной. Наведите указатель мыши на переменную, затем переместите его на появившуюся рамку и нажмите кнопку "Анализ с Copilot"Снимок экрана кнопки В этом сценарии Copilot уже имеет контекст отладчика, поэтому его еще раз не нужно предоставлять в чате.

Дополнительные сведения см. в разделе Отладка с помощью Copilot.