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

Как посмотреть значения переменных в visual studio в отладке

  • автор:

Проверка данных с помощью окон отладчика в Visual Studio

При отладке программы можно открыть большинство окон отладчика. Чтобы просмотреть список окон отладчика, установите точку останова и начните отладку. При нажатии точки останова и остановки выполнения выберите «Отладка > Windows«.

Окно Сочетание клавиш Раздел
Точки останова CTRL + ALT + B Использование точек останова
Параметры исключений CTRL+ALT+E Управление исключениями с помощью отладчика
Выходные данные CTRL + ALT + O Окно вывода
Смотреть CTRL+ALT+W, (1, 2, 3, 4) Окна «Контрольные значения» и «Быстрая проверка»
быстрая проверка SHIFT + F9 Окна «Контрольные значения» и «Быстрая проверка»
Автоматические CTRL + ALT + V, A Окна «Видимые» и «Локальные»
Локальные CTRL + ALT + V, L Окна «Видимые» и «Локальные»
Стеки вызовов CTRL + ALT + C Практическое руководство. Использование окна стека вызова
Интерпретация CTRL + ALT + I Окно интерпретации
Параллельные стеки CTRL+SHIFT+D, S Использование окна «Параллельные стеки»
Контроль параллельных данных CTRL+SHIFT+D, (1, 2, 3, 4) Начало отладки многопоточных приложений
Потоки CTRL + ALT + H Отладка с помощью окна потоков
Модули CTRL+ALT+U Практическое руководство. Использование окна модулей
Потоки GPU Практическое руководство. Использование окна потоков GPU
Задачи CTRL+SHIFT+D, K Использование окна задач
Интерактивная отладка Python SHIFT+ALT+I Интерактивная оболочка REPL для Python
Динамическое визуальное дерево Просмотр свойств XAML во время отладки
Динамический обозреватель свойств Просмотр свойств XAML во время отладки
Процессы CTRL+ALT+Z Отладка потоков и процессов
Память CTRL+ALT+M, (1, 2, 3, 4) Окно памяти
Разборка CTRL+ALT+D Практическое руководство. Использование окна дизассемблирования
Регистры CTRL + ALT + G Практическое руководство. Использование окна регистров

Связанный контент

Обратная связь

Были ли сведения на этой странице полезными?

Обратная связь

Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделе https://aka.ms/ContentUserFeedback.

Отправить и просмотреть отзыв по

Просмотр переменных с помощью окна контрольных значений и быстрой проверки

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

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

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

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

Можно открыть несколько окон контрольных значений и наблюдать за несколькими переменными в окне контрольных значений.

Например, чтобы организовать просмотр значений 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. Откройте окно Контрольные значения, выбрав Отладка>Окна>Контрольные значения>Контрольные значения 1 или нажав клавиши CTRL+ALT+W>1. Вы можете открыть дополнительные окна контрольных значений, выбрав окна 2, 3 или 4.
  4. В окне Контрольные значения выберите пустую строку и тип переменной a . Сделайте то же самое для b и c .

Screenshot of Watch variables.

Screenshot of Watch variables.

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

Использование выражений в окне контрольных значений

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

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

Screenshot of Watch expression.

Screenshot of Watch expression.

Правила вычисления выражений в окне Контрольные значения обычно аналогичны правилам вычисления выражений в используемом языке программирования. Если в выражении есть синтаксическая ошибка, должна произойти та же ошибка компилятора, которая возникла бы в редакторе кода. Например, опечатка в предыдущем выражении выдает следующую ошибку в окне Контрольные значения:

Screenshot of Watch expression error.

Screenshot of Watch expression error.

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

Поиск в окне контрольных значений

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

Для перехода между найденными совпадениями используйте стрелки влево и вправо (SHIFT + F3 и F3 соответственно).

Screenshot of Search in Watch Window.

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

Закрепление свойств в окне контрольных значений

Эта возможность поддерживается в .NET Core 3.0 или более поздних версий.

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

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

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

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

Чтобы обновить значение, щелкните значок обновления или нажмите клавишу ПРОБЕЛ. Отладчик попытается пересчитать выражение. Однако вы, возможно, не захотите или не сможете повторно вычислить выражение, в зависимости от того, почему значение не было вычислено.

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

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

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

Демонстрация использования значка обновления

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

static void Main(string[] args) < Listlist = new List(); list.Add("hello"); list.Add("goodbye"); > 

Screenshot of Refresh Watch.

Screenshot of Refresh Watch.

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

Вычисление некоторых выражений может привести к изменению значения некоторой переменной или иным образом повлиять на состояние приложения. Например, вычисление следующего выражения изменяет значение 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_people = new List(); 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 и появляется в новом окне Контрольные значения.

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

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

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

Окно Быстрая проверка можно использовать для наблюдения за одной переменной.

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

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. Выберите Отладка>Быстрая проверка, нажмите клавиши SHIFT+F9 или щелкните правой кнопкой мыши и выберите в контекстном меню команду Быстрая проверка. Появится диалоговое окно Быстрая проверка. Переменная a находится в поле Выражение со значением1.

Screenshot of QuickWatch variable.

Screenshot of QuickWatch variable.

Screenshot of QuickWatch expression.

Screenshot of QuickWatch expression.

Связанный контент

  • Что такое отладка?
  • Методы и инструменты отладки
  • Первое знакомство с отладкой
  • Окна отладчика

Проверка переменных в окнах «Видимые» и «Локальные» в Visual Studio

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

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

Окно Видимые доступно для кода на C#, Visual Basic, C++ и Python, но не для кода на JavaScript или F#.

Чтобы открыть окно Видимые, во время отладки последовательно выберите пункты Отладка>Окна>Видимые или нажмите сочетание клавиш CTRL+ALT+V>A.

Чтобы открыть окно Локальные, во время отладки последовательно выберите пункты Отладка>Окна>Локальные или нажмите сочетание клавиш ALT+4.

Этот раздел относится к Visual Studio в Windows. Информацию о Visual Studio для Mac см. в статье Визуализации данных в Visual Studio для Mac.

Использование окон «Видимые» и «Локальные»

Массивы и объекты отображаются в окнах Видимые и Локальные как элементы управления в виде дерева. Щелкните стрелку слева от имени переменной, чтобы развернуть представление и увидеть поля и свойства. Далее приведен пример объекта System.IO.FileStream в окне Локальные.

Снимок экрана: окна

Снимок экрана: окна

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

По умолчанию в окнах отладчика используется десятичный числовой формат. Чтобы изменить его на шестнадцатеричный, щелкните правой кнопкой мыши в окне Локальные или Видимые и выберите пункт Шестнадцатеричный вывод. Это изменение распространяется на все окна отладчика.

Изменение значений переменных в окне «Видимые» и «Локальные»

Чтобы изменить значения большинства переменных в окнах Видимые или Локальные, дважды щелкните текущее значение и введите новое.

В качестве значения можно ввести выражение, например a + b . Отладчик принимает большинство допустимых выражений языка.

При работе с машинным кодом C++ может потребоваться определить контекст имени переменной. Дополнительные сведения см. в разделе Оператор контекста (C++).

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

  • Вычисление некоторых выражений может привести к изменению значения некоторой переменной или иным образом повлиять на состояние программы. Например, вычисление var1 = ++var2 изменяет значения var1 и var2 . Такие выражения называют выражениями с побочными эффектами. Если вы не осведомлены о побочных эффектах, они могут привести к непредвиденным результатам.
  • Изменение значений с плавающей запятой может привести к незначительной погрешности, связанной с преобразованием дробных компонентов из десятичной формы в двоичную. Даже внешне кажущееся безвредным редактирование может привести к изменениям некоторых младших разрядов переменной с плавающей запятой.

Поиск в окне «Видимые» или «Локальные»

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

Для перехода между найденными совпадениями используйте стрелки влево и вправо (SHIFT + F3 и F3 соответственно).

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

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

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

Закрепление свойств в окне «Видимые» или «Локальные»

Эта возможность поддерживается для .NET Core 3.0 или более поздних версий.

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

Вы также можете переключать имена свойств и отфильтровать не закрепленные свойства при просмотре списка свойств объекта в окнах «Авто» или «Локальные». Доступ к каждому параметру можно получить, нажимая кнопки на панели инструментов над окнами «Видимые» или «Локальные».

Снимок экрана: избранное свойства фильтра.

Изменение контекста для окна «Видимые» или «Локальные»

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

Чтобы включить панель инструментов «Расположение отладки», щелкните пустую часть области панели инструментов и выберите «Расположение отладки» в раскрывающемся списке или выберите «Просмотреть>панели инструментов отладки».>

Задайте точку останова и начните отладку. При достижении точки останова выполнение приостанавливается и вы можете увидеть расположение на панели инструментов Место отладки.

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

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

Переменные в окне автозапуска (C#, C++, Visual Basic, Python)

При работе с разными языками в окне Видимые отображаются разные переменные.

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

 public static void Main()

Задайте точку останова в строке c = 3; и запустите отладчик. Когда выполнение приостановится, в окне Видимые будет отображено следующее.

Снимок экрана: окно

Снимок экрана: окно

 void main()

Задайте точку останова в строке e = 5; и запустите отладчик. Когда выполнение остановится, в окне Видимые будет отображено следующее.

Снимок экрана: окно

Снимок экрана: окно

View return values of method calls

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

Например, следующий код C# добавляет возвращаемые значения двух функций.

static void Main(string[] args) < int a, b, c, d; a = 1; b = 2; c = 3; d = 4; int x = sumVars(a, b) + subtractVars(c, d); >private static int sumVars(int i, int j) < return i + j; >private static int subtractVars(int i, int j)

Чтобы просмотреть возвращаемые значения вызовов методов sumVars() и subtractVars() в окне «Видимые», выполните следующие действия.

  1. Установите точку останова на строке int x = sumVars(a, b) + subtractVars(c, d); .
  2. Начните отладку и, когда выполнение приостановится в точке останова, выберите Шаг с обходом или нажмите клавишу F10. Вы увидите следующие возвращаемые значения в окне Видимые.

Снимок экрана: автоматическое возвращаемое значение C#.

Снимок экрана: автоматическое возвращаемое значение C#.

Связанный контент

  • Что такое отладка?
  • Методы и инструменты отладки
  • Первое знакомство с отладкой
  • Окна отладчика

Как увидеть значения переменных при отладке?

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

Знаете ли вы. Вы можете узнать все о отладчике на Документация Майкрософт!

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

Знаете ли вы. Вы можете узнать все о отладчике на Документация Майкрософт!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *