Отладка кода в Visual Studio
Для отладки определенной веб-страницы в Visual Studio выберите эту веб-страницу в окне Solution Explorer и щелкните на кнопке Start Debugging (Начать отладку) в панели инструментов. (Если вы в данный момент редактируете веб-страницу, которую собираетесь тестировать, то выбирать ее нет необходимости — просто щелкните на кнопке Start Debugging для ее запуска.)
Дальнейшие события зависят от расположения вашего проекта. Если ваш проект хранится на удаленном веб-сервере или локальном виртуальном каталоге IIS, Visual Studio просто запускает браузер по умолчанию и направляет на соответствующий URL.
Если вы использовали приложение файловой системы, Visual Studio запускает свой встроенный веб-сервер на динамически выбранном порту (который предотвращает конфликт с IIS, если он установлен). Затем Visual Studio запускает браузер по умолчанию и передает ему URL, указывающий на локальный веб-сервер. В каждом случае реальная работа — компиляция страницы и создание объектов страницы — передается рабочему процессу ASP NET.
Тестовый сервер запускается только на время работы Visual Studio и принимает запросы исключительно от данного компьютера. После запуска встроенного веб-сервера Visual Studio добавляет в область значков панели задач представляющий его значок. Чтобы получить дополнительную информацию о тестовом сервере или завершить его работу, необходимо дважды щелкнуть на этом значке.
Разделение Visual Studio, веб-сервера и ASP.NET предоставляет несколько интересных возможностей. Например, пока окно браузера открыто, можно по-прежнему вносить изменения в код и HTML-дескрипторы веб-страниц. Завершив внесение изменений, сохраните страницу и щелкните на кнопке Refresh (Обновить) в браузере для ее повторного запроса. Хотя всегда требуется перезапуск всей страницы для просмотра результатов внесенных изменений, это более удобно, нежели повторная сборка целиком всего проекта.
Фиксация и перезапуск веб-страницы полезны, но что делать, когда необходимо отследить трудно уловимую ошибку? В этих случаях понадобятся усовершенствованные возможности отладки Visual Studio, которые рассматриваются в последующих разделах.
Если тестовый веб-сервер используется, он запускает весь код от имени вашей пользовательской учетной записи. Это отличается от намного более ограниченного поведения, наблюдаемого в IIS, где для обеспечения безопасности применяется менее привилегированная учетная запись. Важно понимать разницу, поскольку, если приложение получает доступ к защищенным ресурсам (таким как файловая система, база данных, системный реестр или журнал регистрации событий), необходимо явно разрешить доступ пользователю IIS.
Пошаговая отладка
позволяет выполнять код по одной строке за раз. Выглядит она чрезвычайно просто и подразумевает выполнение следующих действий:
-
Найдите в коде точку, в которой необходимо приостановить выполнение, и начните пошаговое выполнение (можно использовать любую исполняемую строку кода, но не объявление переменной, комментарий или пустую строку). Щелкните на поле возле кода строки, после чего появится точка останова, помеченная красным цветом:


Если вы поместите курсор над объектом, то сможете просмотреть все его свойства, щелкнув на маленьком знаке «плюс»:

Перевести программу в режим паузы можно в любой момент, щелкнув на кнопке паузы в панели инструментов или выбрав в меню Debug (Отладка) команду Break All (Остановить все).
Слежение за переменными
В некоторых случаях может понадобиться отслеживать состояние переменной без постоянного переключения в режим паузы. В таких ситуациях более полезными оказываются окна Locals (Локальные), Autos (Автоматические) и Watch (Слежение), которые позволяют отслеживать переменные во всем приложении:
| Окно | Описание |
|---|---|
| Locals | Автоматически отображает все переменные в пределах текущей процедуры, предлагая быстрый обзор важных переменных |
| Autos | Автоматически отображает переменные, которые система Visual Studio определила как важные для текущего оператора в коде. Сюда могут входить, например, переменные, к которым получается доступ или которые изменяются в предыдущей строке |
| Watch | Отображает добавленные вами переменные. Установки слежения сохраняются вместе с проектом, чтобы можно было продолжить слежение за переменными позже. Для добавления слежения щелкните правой кнопкой мыши на переменной в коде и выберите в контекстном меню пункт Add Watch (Добавить слежение); в качестве альтернативы дважды щелкните на последней строке в окне Watch и введите имя переменной |
Каждая строка в окнах Locals, Autos и Watch предоставляет информацию о типе или классе переменной и ее текущем значении. Если переменная содержит экземпляр объекта, ее можно развернуть и просмотреть приватные члены и свойства.
Например, в окне Locals вы увидите переменную this, которая является ссылкой на текущий объект страницы. Если вы щелкнете на знаке «плюс» возле нее, появится полный список свойств страницы (и некоторые системные значения):

Окна Locals, Autos и Watch позволяют изменять переменные или свойства во время нахождения программы в режиме паузы. Дважды щелкните на текущем значении в столбце Value (Значение) и введите новое значение. Если не хватает какого-то окна слежения, отобразите его вручную, выбрав его в подменю Windows меню Debug.
Расширенные точки останова
Выберите в меню Debug (Отладка) команду Windows —> Breakpoints для отображения окна, в котором перечислены все точки останова в текущем проекте. Окно Breakpoints (Точки останова) предоставляет счетчик попаданий в точку останова. Дважды щелкнув на точке останова, можно переместиться в соответствующее место кода:

Окно Breakpoints можно также применять для отключения точки останова без ее удаления. Это позволяет сохранить точку останова, чтобы использовать во время тестирования позже. Точки останова автоматически сохраняются в файле решения.
Visual Studio позволяет настраивать точки останова так, чтобы они проявлялись только в случае соблюдения определенных условий. Чтобы настроить точку останова, щелкните на ней правой кнопкой мыши и выберите одну из перечисленных ниже опций:
Location
Используйте эту опцию, если хотите увидеть точный файл и строку, в которой находится данная точка останова.
Condition
Используйте эту опцию, если хотите настроить выражение и сделать так, чтобы эта точка останова срабатывала только в случае, когда данное выражение будет истинным, или в случае его изменения с момента последнего срабатывания данной точки останова.
Hit Count
Используйте эту опцию, если хотите создать точку останова, которая будет приостанавливать процесс выполнения только либо после определенного количества срабатываний (например, хотя бы после 20), либо через определенное количество срабатываний (например, через каждые 5).
Filter
Используйте эту опцию, если хотите включить точку останова только для конкретных процессов или потоков. В ASP.NET эта опция применяется редко, поскольку весь код веб-страниц выполняется рабочим процессом ASP.NET, а он использует пул потоков.
When Hit
Используйте эту опцию, если хотите настроить действие, которое должно автоматически выполняться при каждом срабатывании точки останова. Существует два удобных варианта. Первый — указать в качестве такого действия вывод сообщения в окне Debug (Отладка), что позволит следить за ходом выполнения кода без его загромождения операторами Debug.Write(). Такой прием называется созданием точек трассировки (tracepoint).
Второй вариант — указать в качестве такого действия запуск макроса Visual Studio, что позволит выполнить в IDE-среде практически любое действие.
Проверка переменных в окнах «Видимые» и «Локальные» в Visual Studio
Область применения:
Visual Studio Visual Studio для Mac
Visual Studio Code ![]()
В окнах Видимые и Локальные отображаются значения переменных во время отладки. Окна доступны только во время сеанса отладки. В окне «Автозапуск» отображаются переменные, используемые вокруг текущей инструкции, в которой отладчик приостановлен. В окне Локальные отображаются переменные, определенные в локальной области, которая обычно является текущей функцией или методом.
Если вы не знакомы с процессом отладки кода, перед выполнением задач в этой статье рекомендуется прочесть документ об отладке для начинающих и статью Методы и инструменты отладки.
Окно Видимые доступно для кода на 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 или более поздних версий.
С помощью средства Закрепляемые свойства можно быстро проверить объекты на основе их свойств в окнах «Видимые» и «Локальные». Чтобы воспользоваться этим средством, наведите указатель мыши на свойство и выберите значок булавки либо щелкните правой кнопкой мыши и в контекстном меню выберите пункт Закрепить элемент в избранном. Свойство будет размещено в верхней части списка свойств объекта, а имя и значение свойства будут отображаться в столбце Значение. Чтобы открепить свойство, щелкните значок булавки еще раз или в контекстном меню выберите пункт Открепить элемент в избранном.
При просмотре списка свойств объекта в окнах «Видимые» или «Локальные» можно также включать и отключать отображение имен свойств и отфильтровывать незакрепленные свойства. Доступ к каждому параметру можно получить, нажимая кнопки на панели инструментов над окнами «Видимые» или «Локальные».

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


Переменные в окне автозапуска (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() в окне «Видимые», выполните следующие действия.
- Установите точку останова на строке int x = sumVars(a, b) + subtractVars(c, d); .
- Начните отладку и, когда выполнение приостановится в точке останова, выберите Шаг с обходом или нажмите клавишу F10. Вы увидите следующие возвращаемые значения в окне Видимые.


См. также
- Что такое отладка?
- Методы и инструменты отладки
- Первое знакомство с отладкой
- Окна отладчика
Просмотр значений данных в подсказках по данным в редакторе кода
Область применения:
Visual Studio Visual Studio для Mac
Visual Studio Code ![]()
Подсказки по данным предоставляют удобный способ просмотра сведений о переменных в программе во время отладки. Подсказки по данным работают только в режиме прерывания и только с переменными, которые находятся в пределах текущей области выполнения. Если вы не знакомы с процессом отладки кода, перед выполнением задач в этой статье рекомендуется прочесть документ об отладке для начинающих и статью Методы и инструменты отладки.
Работа с подсказками по данным
Подсказки по данным появляются только в режиме прерывания и только с переменными, которые находятся в пределах текущей области выполнения.
Отображение подсказки по данным
- Установите точку останова в коде и начните отладку, нажав клавишу F5 или выбрав команду Отладка>Начать отладку.
- При приостановке в точке останова наведите указатель мыши на любую переменную в текущей области. Появится подсказка по данным с именем и текущим значением переменной.
Как сделать подсказку по данным прозрачной
Чтобы сделать подсказку по данным прозрачной для просмотра находящегося за ней кода, нажмите клавишу CTRL, когда подсказка отображается. Подсказка будет прозрачной, пока удерживается клавиша CTRL. Для закрепленных или плавающих подсказок этот метод не работает.
Развернутая подсказка по данным
Начиная с Visual Studio 2022 с обновлением 1 появилась возможность сохранять подсказку по данным развернутой, пока вы не щелкнете в другом месте. Это называется закрепленной подсказкой по данным. Чтобы включить эту функцию, выберите Инструменты>Параметры>Отладка, а затем на вкладке Общие выберите Сохранять развернутые подсказки по данным до щелчка в другим месте.
Закрепление подсказок по данным
Для закрепления подсказки по данным, чтобы она оставалась открытой, щелкните значок кнопки Прикрепить к источнику.

Закрепленную подсказку можно перемещать, перетаскивая ее в окне кода. Значок кнопки отображается во внутреннем поле рядом со строкой, к которой прикреплена подсказка.
Подсказки по данным всегда определяются в контексте того места, где приостановлено выполнение, а не в контексте текущего местоположения курсора или местоположения подсказки. Если в другой функции навести указатель на переменную, имеющую такое же имя, что и переменная в текущем контексте, отобразится значение переменной в текущем контексте.
Открепление подсказки по данным от источника
Чтобы сделать закрепленную подсказку по данным плавающей, наведите на нее указатель мыши и выберите значок кнопки в контекстном меню.
Значок кнопки примет открепленную форму, и подсказка станет плавающей, или вы сможете перетаскивать ее по всем открытым окнам. Плавающие подсказки по данным закрываются при завершении сеанса отладки.
Повторное закрепление подсказок по данным
Чтобы повторно закрепить плавающую подсказку по данным, наведите на нее указатель мыши в редакторе кода и щелкните значок кнопки. Значок кнопки примет прикрепленную форму, и подсказка снова станет закрепленной в этом окне кода.
Если плавающая подсказка находится не в окне исходного кода, значок кнопки недоступен, и подсказку нельзя закрепить повторно. Чтобы значок кнопки стал доступен, верните подсказку в окно редактора кода, перетащив ее или переместив фокус в окно кода.
Закрытие подсказки по данным
Чтобы закрыть подсказку по данным, наведите на нее указатель мыши и выберите значок закрытия (x) в контекстном меню.
Закрытие всех подсказок по данным
Чтобы закрыть все подсказки по данным, в меню Отладка выберите команду Очистить все подсказки по данным.
Закрытие всех подсказок по данным для определенного файла
Чтобы закрыть все подсказки по данным для определенного файла, в меню Отладка выберите команду Очистить все подсказки по данным, прикрепленные к .
Развертывание и изменение сведений
Вы можете использовать подсказки по данным, чтобы развернуть массив, структуру или объект для просмотра его элементов. Кроме того, вы можете изменить значение переменной из подсказки по данным.
Развертывание переменной
Чтобы развернуть объект в подсказке по данным для просмотра его элементов, наведите указатель мыши на стрелки развертывания перед именами элементов. Элементы отобразятся в виде дерева. Для закрепленной подсказки по данным нажмите + перед именем переменной, а затем разверните дерево.

Для перемещения вверх и вниз по развернутому представлению можно использовать мышь или клавиши со стрелками.
Вы также можете закреплять развернутые элементы в закрепленной подсказке по данным, наводя на них указатель мыши и выбирая значок кнопки. После свертывания дерева выбранные элементы будут отображаться в закрепленной подсказке.
Изменение значения переменной
Чтобы изменить значение переменной или элемента в подсказке по данным, выберите значение, введите новое значение и нажмите клавишу ВВОД. Значения, предназначенные только для чтения, недоступны для выбора.
Закрепление свойств в подсказках по данным
Эта возможность поддерживается для .NET Core 3.0 или более поздних версий.
С помощью средства Закрепляемые свойства можно быстро проверять объекты по их свойствам в подсказках по данным. Чтобы воспользоваться этим средством, наведите указатель мыши на свойство и выберите значок булавки либо щелкните правой кнопкой мыши и в контекстном меню выберите пункт Закрепить элемент в избранном. При этом это свойство всплывает в верхней части списка свойств объекта, а имя и значение свойства отображаются в правом столбце подсказки по данным. Чтобы открепить свойство, щелкните значок булавки еще раз или в контекстном меню выберите пункт Открепить элемент в избранном.
При просмотре списка свойств объекта в подсказке по данным можно также включать и отключать отображение имен свойств и отфильтровывать незакрепленные свойства. Чтобы получить доступ к любой из этих команд, щелкните правой кнопкой мыши строку со свойством и выберите в контекстном меню команду Показать только закрепленные элементы или Скрыть имена закрепленных элементов в значениях.
Визуализация сложных типов данных
Значок с увеличением стекла рядом с переменной или элементом в подсказке данных означает, что для переменной доступны один или несколько визуализаторов, таких как визуализатор текста. Визуализаторы выводят сведения в более наглядной, иногда графической, форме.
![]()
Чтобы просмотреть элемент с помощью визуализатора по умолчанию для типа данных, выберите значок с увеличением стекла. Щелкните стрелку рядом со значком лупы, чтобы выбрать вариант из списка визуализаторов для типа данных.
Добавление переменной в окно контрольных значений
Если вы хотите продолжить наблюдение за переменной, то можете добавить ее в окно контрольных значений из подсказки по данным. Щелкните правой кнопкой мыши переменную в подсказке по данным и выберите пункт Добавить контрольное значение.
Переменная появится в окне Контрольные значения. Если в используемом выпуске Visual Studio поддерживается несколько окон Контрольные значения, переменная появится в окне Контрольные значения 1.
Импорт и экспорт подсказок по данным
Подсказки по данным можно экспортировать в XML-файл. Затем этот файл можно использовать совместно или изменять в текстовом редакторе. Вы также можете импортировать XML-файл подсказок по данным, который получили или изменили.
Экспорт подсказок по данным
- Выберите команду Отладка>Экспорт подсказок по данным.
- В диалоговом окне Экспорт подсказок по данным перейдите к месту, где нужно сохранить XML-файл, введите им файла и нажмите кнопку Сохранить.
Импорт подсказок по данным
- Выберите команду Отладка>Импорт подсказок по данным.
- В диалоговом окне Импорт подсказок по данным выберите XML-файл подсказок, который хотите, и нажмите Открыть.
См. также
- Что такое отладка?
- Методы и инструменты отладки
- Первое знакомство с отладкой
- Просмотр данных в отладчике
- Окна «Контрольные значения» и «Быстрая проверка»
- Создание пользовательских визуализаторов для объектов .NET
При отладке не удается получить значения переменных в Visual Studio
В процессе отладки серверного кода бизнес процесса столкнулся с проблемой, уже ранее описанной в теме https://community.terrasoft.ua/taxonomy/term/7738. Хотелось бы понять, для версии 7.13 возможно ли каким либо образом решить проблему просмотра переменных в режиме дебага без ошибки Cannot obtain value of the local variable or argument because it is not available at this instruction pointer, possibly because it has been optimized away, либо это невозможно. Дело в том, что невозможность посмотреть значение переменных замедляет разработку.
Так же не везде удается установить breakpoints. Возможно эти проблемы связаны между собой.
1. Заново выполнить Attach to Process.
2. Установка Suppress JIT optimization on module load в настройках дебага.
3. В Build проекта снята галка Optimize code и Debugging information = Full
5 комментариев
27 мая 2019 18:20
Вам необходимо в Options-Debugging-General также отключить флаг Enable Just My Code.
27 мая 2019 23:08
Илья,
Спасибо за ответ,
Однако, даже с отключенным флагом я могу установить breakpoints не везде, так же могу посмотреть значения только некоторых переменных.
12 февраля 2020 11:49
Alex, добрый день! Скажите, пожалуйста, смогли ли Вы справиться с проблемой? После обновления с 7.12 до 7.15 столкнулся с тем же самым, ничего не помогает
14 февраля 2020 17:21
Вот более свежий случай, причём от него же. Судя по молчанию автора, он таки решил свой вопрос или нашёл какой-то обходной способ.
17 февраля 2020 14:37
Иван Небеддаг,
Да, справиться удалось.
Я отказался от работы с Workspace. Enable Just My Code у меня включена. Конфигурационный проект содержит только разрешенные assemblies, например Terrasoft.Common, Terrasoft.Core и тд.
Алгоритм работы, при котором работает отладка у меня:
1. Если есть изменения в гите, то забрать их, это действие обновит часть содержимого из папки Pkg. Далее в конфигурации забрать изменения из файловой системы, компилировать измененное. Если изменений нет, то не нужно.
2. Создать класс в конфигураторе, сохранить. С бизнес процессом аналогично. Сохранение автоматически выгружает изменения в файловую систему.
3. Написать в студии логику, нажать на сохранить все.
4. Нажать на компилировать измененное в конфигураторе.
5. Подключиться дебаггером к процессу IIS, установить точки останова.
6. Нажать на компилировать измененное в конфигураторе. По завершении компиляции в студии будут прогружены необходимые для дебага файлы, после чего точки останова станут активны. При отладке, так же будут видны значения переменных и тд.
Нашел баг, при котором на измененной логике точки останова устанавливаются, однако значения переменных смотреть не выходит.
В этом случае после первой компиляции (п4) необходимо нажать на выгрузить измененное в файловую систему, после чего запустить повторно компиляцию, и далее 5, 6.
Надеюсь, помог. Если не помог, и Ваше решение отличается от моего, напишите его суда, пожалуйста. Для истории будет полезно.
