Краткое руководство. Отладка кода C# или Visual Basic с помощью отладчика Visual Studio
Область применения:Visual Studio Visual Studio для Mac
Visual Studio Code ![]()
Отладчик Visual Studio реализует множество эффективных функций для отладки приложений. В этой статье представлен краткий способ изучения некоторых основных функций.
Создание нового проекта
- Откройте Visual Studio и создайте новый проект. Если окно запуска не открыто, выберите Файл >Окно запуска. На начальном экране выберите Создать проект. В поле поиска окна Создание проекта введите консоль. Затем выберите C# в списке языков и Windows в списке платформ. Применив фильтры по языку и платформе, выберите шаблон Консольное приложение для .NET Core и нажмите кнопку Далее. Выберите рекомендуемую целевую платформу или .NET 8, а затем нажмите кнопку «Создать«. Если вы не видите шаблон проекта Консольное приложение для .NET Core, выберите Средства>Получить средства и компоненты, после чего запустится Visual Studio Installer. Выберите рабочую нагрузку Кроссплатформенная разработка .NET Core и затем элемент Изменить. Visual Studio создаст проект.
- В Program.cs или Module1.vb замените код
class Program < static void Main(string[] args) < >>
Module Module1 Sub Main() End Sub End Module
class Program < private static void doWork() < LinkedListc1 = new LinkedList(); c1.AddLast(10); c1.AddLast(20); LinkedList c2 = new LinkedList(c1); int i = c2.First.Value; int j = c2.First.Value; Console.Write("The first element is "); Console.Write(i); Console.Write("\n"); Console.Write("The second element is "); Console.Write(j); Console.Write("\n"); > static int Main() < // using namespace std; doWork(); return 0; >>
Imports System.Collections.Generic Namespace MyDbgApp Class Program Private Shared Sub doWork() Dim c1 As New LinkedList(Of Integer)() c1.AddLast(10) c1.AddLast(20) Dim c2 As New LinkedList(Of Integer)(c1) Dim i As Integer = c2.First.Value Dim j As Integer = c2.First.Value Console.Write("The first element is ") Console.Write(i) Console.Write(vbLf) Console.Write("The second element is ") Console.Write(j) Console.Write(vbLf) End Sub Public Shared Function Main() As Integer ' using namespace std; doWork() Return 0 End Function End Class End Namespace
Убедитесь в том, что в Visual Basic задан автоматически запускаемый объект Sub Main (Свойства > Приложение > Автоматически запускаемый объект).
Установка точки останова
Точка останова указывает, где Visual Studio следует приостановить выполнение кода, чтобы вы могли проверить значения переменных или поведение памяти, либо выполнение ветви кода. Это самая базовая функция отладки.
- Чтобы задать точку останова, щелкните в области слева от вызова функции doWork (или выберите строку кода и нажмите клавишу F9).

- Нажмите клавишу F5 (или выберите Отладка > Начать отладку).
Отладчик приостановит выполнение в заданной точке останова. Желтая стрелка определяет инструкцию, в которой отладчик и выполнение приложения приостановлены. Строка, содержащая вызов функции doWork , пока еще не выполнена.
Совет При наличии точки останова в цикле или рекурсии либо большого числа точек останова, которые вы часто будете просматривать пошагово, используйте условную точку останова, которая позволяет приостанавливать код только при выполнении определенных условий. Использование условных точек останова позволяет сэкономить время и упростить отладку проблем, которые сложно воспроизвести.
Навигация по коду
Чтобы продолжить работу отладчика, можно использовать различные команды. Здесь описываются полезные новые команды для навигации по коду, доступные с версии Visual Studio 2017.

Пока код приостановлен в точке останова, наведите указатель мыши на инструкцию c1.AddLast(20) , пока не появится зеленая кнопка»Запустить«, а затем нажмите кнопку «Выполнить», чтобы нажать кнопку.

Выполнение приложения продолжится путем вызова doWork и будет приостановлено в той строке, в которой вы нажмете эту кнопку.
В процессе пошагового выполнения кода обычно используются клавиши F10 и F11. Более подробные инструкции см. в статье Знакомство с отладчиком Visual Studio.
Проверка переменных в подсказке по данным

- В текущей строке кода, отмеченной желтым указателем выполнения, наведите указатель мыши на объект c1 , чтобы просмотреть подсказку по данным. Подсказка по данным содержит текущее значение переменной c1 и позволяет проверить ее свойства. Если во время отладки отображается значение, которое вы не ожидали увидеть, возможно, в предыдущей или вызывающей строке кода имеется ошибка.
- Разверните подсказку по данным, чтобы просмотреть текущие значения свойств объекта c1 .
- Если вы хотите закрепить подсказку данных, чтобы вы могли продолжать видеть значение c1 при выполнении кода, выберите небольшой значок закрепления. (При необходимости вы можете переместить закрепленную подсказку по данным в удобное положение.)
Изменение кода и продолжение отладки
Вы можете сделать это во время сеанса отладки, если вам потребуется внести изменения в код.
- Выберите второй экземпляр c2.First.Value и измените его c2.First.Value c2.Last.Value .
- Нажмите клавишу F10 (или выберите команду Отладка > Шаг с обходом) несколько раз, чтобы пройти вперед и выполнить измененный код. При нажатии клавиши F10 отладчик каждый раз переходит вперед на одну инструкцию, однако при этом минует функции, не заходя в них (пропускаемый код в таком случае по-прежнему выполняется).
Дополнительные сведения об этом режиме и его ограничениях см. в статье Изменить и продолжить.
Следующие шаги
В этом руководстве вы узнали, как запускать отладчик, осуществлять пошаговое выполнение кода и проверять переменные. Возможно, вы захотите получить более полное представление о возможностях отладчика, а также воспользоваться ссылками на дополнительные материалы.
Руководство. Отладка кода C++ с помощью Visual Studio
Область применения:
Visual Studio Visual Studio для Mac
Visual Studio Code ![]()
В этом пошаговом руководстве рассматриваются возможности отладчика Visual Studio. Более полное описание функций отладчика см. в статье c Знакомство с отладчиком Visual Studio. Отладка приложения обычно означает запуск и выполнение приложения с подключенным отладчиком. При этом в отладчике доступно множество способов наблюдения за выполнением кода. Вы можете пошагово перемещаться по коду и просматривать значения, хранящиеся в переменных, задавать контрольные значения для переменных, чтобы отслеживать изменение значений, изучать путь выполнения кода, просматривать выполнение ветви кода и т. д. Если вы не знакомы с процессом отладки, перед выполнением задач в этой статье рекомендуется прочесть документ об отладке для начинающих.
Несмотря на то, что демонстрационное приложение написано на C++, большинство функций применимы к C#, Visual Basic, F#, Python, JavaScript и другим языкам, поддерживаемым Visual Studio (F# не поддерживает возможность «Изменить и продолжить». F# и JavaScript не поддерживают окно Видимые). Снимки экрана приведены для C++.
При работе с этим руководством вы сделаете следующее:
- Запуск отладчика и попадание в точки останова.
- Использование команд для пошагового выполнения кода в отладчике.
- Проверка переменных в подсказках к данным и окнах отладчика.
- Изучение стека вызовов
Необходимые компоненты
У вас должна быть установлена среда Visual Studio и рабочая нагрузка Разработка классических приложений на C++.
Установите Visual Studio бесплатно со страницы скачиваемых материалов Visual Studio, если еще не сделали этого.
Установите Visual Studio 2022 бесплатно со страницы скачиваемых материалов Visual Studio 2022, если еще не сделали этого.
Если вам нужно установить рабочую нагрузку, но вы уже используете Visual Studio, выберите пункт Средства>Получить средства и компоненты. , после чего запустится Visual Studio Installer. Запускается Visual Studio Installer. Выберите рабочую нагрузку Разработка классических приложений на C++, а затем нажмите Изменить.
Создание проекта
Сначала вы создадите проект консольного приложения на C++. Для этого типа проекта уже имеются все нужные файлы шаблонов, что избавляет вас от лишней работы.
- Откройте Visual Studio. Если окно запуска не открыто, выберите Файл>Окно запуска.
- На начальном экране выберите Создать проект.
- В поле поиска окна Создание проекта введите консоль. Затем выберите C++ в списке языков и Windows в списке платформ. Применив фильтры языка и платформы, выберите шаблон Консольное приложение и нажмите кнопку Далее.


Примечание. Если шаблон Консольное приложение отсутствует, его можно установить из окна Создание проекта. В сообщении Не нашли то, что искали? выберите ссылку Установка других средств и компонентов. После этого в Visual Studio Installer выберите рабочую нагрузку Разработка классических приложений на C++.
Создание приложения
- Откройте файл get-started-debugging.cpp и замените все его содержимое по умолчанию следующим кодом:
#include #include #include void SendMessage(const std::wstring& name, int msg) < std::wcout int main() < std::vectorletters = < L'f', L'r', L'e', L'd', L' ', L's', L'm', L'i', L't', L'h' >; std::wstring name = L""; std::vector a(10); std::wstring key = L""; for (int i = 0; i < letters.size(); i++) < name += letters[i]; a[i] = i + 1; SendMessage(name, a[i]); >std::wcin >> key; return 0; >
Запуск отладчика

- Нажмите клавишу F5 (Отладка > Начать отладку) или кнопку Начать отладкуна панели инструментов отладки. При нажатии клавиши F5 происходит запуск приложения с присоединенным отладчиком. Но пока мы не сделали ничего особенного, чтобы проанализировать код. Поэтому приложение будет просто загружено, и вы увидите выходные данные консоли.
Hello, f! Count to 1 Hello, fr! Count to 2 Hello, fre! Count to 3 Hello, fred! Count to 4 Hello, fred ! Count to 5 Hello, fred s! Count to 6 Hello, fred sm! Count to 7 Hello, fred smi! Count to 8 Hello, fred smit! Count to 9 Hello, fred smith! Count to 10

В этом руководстве мы более подробно рассмотрим приложение с отладчиком и познакомимся с возможностями отладчика.
Установка точки останова и запуск отладчика
- В цикле for функции main установите точку останова, щелкнув левое поле следующей строки кода: name += letters[i]; В месте установки точки останова появится красный круг
. Точки останова — это один из самых простых и важных компонентов надежной отладки. Точка останова указывает, где Visual Studio следует приостановить выполнение кода, чтобы вы могли проверить значения переменных или поведение памяти либо выполнение ветви кода. - Нажмите клавишу F5 или кнопку Начать отладку
. Приложение запустится и отладчик перейдет к строке кода, где задана точка останова.
Желтая стрелка представляет оператор, на котором приостановлен отладчик. В этой же точке приостанавливается выполнение приложения (этот оператор пока не выполнен). Если приложение еще не запущено, клавиша F5 запускает отладчик и останавливается в первой точке останова. В противном случае F5 продолжает выполнение приложения до следующей точки останова. Точки останова полезны, если вам известны строка или раздел кода, которые вы хотите подробно рассмотреть. Дополнительные сведения о различных типах точек останова, которые можно задать, например об условных точках останова, см. в разделе Использование точек останова.
Переход по коду в отладчике с помощью пошаговых команд
Здесь мы используем в основном сочетания клавиш, так как они позволяют быстро выполнять приложение в отладчике (эквивалентные команды, например команды меню, отображаются в круглых скобках).
- Во время приостановки в цикле for в методе main дважды нажмите клавишу F11 (или выберите Отладка > Шаг с заходом), чтобы перейти к вызову метода SendMessage . После двойного нажатия клавиши F11 вы должны находиться на следующей строке кода: SendMessage(name, a[i]);
- Еще раз нажмите клавишу F11, чтобы выполнить шаг с заходом в метод SendMessage . Желтый указатель перемещается в метод SendMessage .
F11 — это команда Шаг с заходом, которая выполняет приложение с переходом к следующему оператору. Клавишу F11 удобно использовать для более детальной проверки потока выполнения. (Чтобы ускорить перемещение по коду, мы также показываем некоторые другие варианты.) По умолчанию отладчик пропускает код, отличный от пользователя (если требуется дополнительные сведения, см . только мой код). Предположим, что вы закончили изучать метод SendMessage и хотите выйти из него, но остаться в отладчике. Это можно сделать с помощью команды Шаг с выходом. - Нажмите клавиши SHIFT + F11 (или выберите Отладка > Шаг с выходом). Эта команда возобновляет выполнение приложения (и работу отладчика) до возврата данных текущим методом или текущей функции. Вы должны вернуться в цикл for в методе main , приостановленный на вызове метода SendMessage .
- Нажмите клавишу F11 несколько раз, пока не вернетесь к вызову метода SendMessage .
- Во время приостановки на вызове метода один раз нажмите клавишу F10 (или выберите Отладка > Шаг с обходом).
Обратите внимание, что в этот раз отладчик не заходит в метод SendMessage . Клавиша F10 перемещает отладчик без захода в функции или методы в коде приложения (код продолжает выполняться). Нажав клавишу F10 (а не F11) в вызове метода SendMessage , мы пропускаем код реализации для SendMessage (пока это нас не интересует). Дополнительные сведения о различных способах перемещения по коду см. в разделе Навигация по коду в отладчике.
Переход по коду с помощью команды «Выполнение до щелкнутого»
- Нажмите клавишу F5, чтобы перейти к точке останова.
- В редакторе кода прокрутите вниз и наведите указатель мыши на std::wcout функцию в SendMessage методе, пока зеленая кнопка «Запустить, чтобы щелкнуть »
слева. В подсказке для кнопки выводится «Выполнить до этого места». 
Примечание. Кнопка Выполнение до щелкнутого впервые появилась в Visual Studio 2017. (Если кнопка с зеленой стрелкой отсутствует, воспользуйтесь клавишей F11, чтобы переместить отладчик в нужное место.)

Быстрый перезапуск приложения

Щелкните кнопку Перезапустить на панели инструментов отладки (CTRL + SHIFT + F5).
Кнопка Перезапустить позволяет сэкономить время, затрачиваемое на остановку приложения и перезапуск отладчика. Отладчик приостанавливается в первой точке останова, достигнутой при выполнении кода.
Отладчик еще раз останавливается в точке останова, ранее заданной вами в цикле for .
Проверка переменных с помощью подсказок по данным
Функции, позволяющие проверять переменные, являются самыми полезными возможностями отладчика. Реализовывать эту задачу можно разными способами. Часто при попытке выполнить отладку проблемы пользователь старается выяснить, хранятся ли в переменных значения, которые требуются ему в определенное время.

- При приостановке на операторе name += letters[i] наведите указатель мыши на переменную letters и увидите ее значение по умолчанию — size= .
- Разверните переменную letters , чтобы просмотреть ее свойства, включая все элементы, которые она содержит.
- Затем наведите указатель мыши на переменную name , чтобы просмотреть ее текущее значение — пустую строку.
- Несколько раз нажмите клавишу F5 (или выберите Отладка>Продолжить), чтобы выполнить несколько итераций по циклу for , каждый раз снова приостанавливая выполнение в точке останова и наводя указатель мыши на переменную name , чтобы просмотреть ее значение. Значение переменной изменяется при каждой итерации цикла for — f , затем fr , fre и т. д. Часто при отладке требуется быстро проверить значения свойств в переменных, чтобы убедиться, что в них хранятся ожидаемые значения. Советы по данным — отличный способ это сделать.
Проверка переменных с помощью окон «Видимые» и «Локальные»
- Взгляните на окно Видимые в нижней части редактора кода. Если оно закрыто, откройте его во время приостановки в отладчике, выбрав Отладка>Окна>Видимые. В окне Видимые отображаются переменные и их текущие значения. В окне Видимые отображаются все переменные, используемые в текущей или предыдущей строке (сведения о зависящем от языка поведении см. в соответствующей документации).
- Затем посмотрите на окно Локальные на вкладке рядом с окном Видимые.
- Разверните переменную letters , чтобы отобразить элементы, которые она содержит.


Установка контрольного значения
- В основном окне редактора кода щелкните правой кнопкой мыши переменную name и выберите команду Добавить контрольное значение. В нижней части редактора кода откроется окно Контрольное значение. В окне Контрольное значение можно указать переменную (или выражение), которую необходимо отслеживать. Теперь у вас есть контрольное значение, заданное для переменной name , и по мере перемещения по отладчику вы можете наблюдать за изменением его значения. В отличие от других окон переменных, в окне Контрольное значение всегда отображаются просматриваемые вами переменные (они выделяются серым цветом, когда находятся вне области действия).
Изучение стека вызовов
- Во время приостановки в цикле for щелкните окно Стек вызовов, которое по умолчанию открыто в нижней правой области. Если оно закрыто, откройте его во время приостановки в отладчике, выбрав Отладка>Окна>Стек вызовов.
- Несколько раз нажмите клавишу F11, пока отладчик не приостановится в методе SendMessage . Взгляните на окно Стек вызовов.


В окне Стек вызовов показан порядок вызова методов и функций. В верхней строке приведена текущая функция (в данном приложении метод SendMessage ). Во второй строке показано, что функция SendMessage была вызвана из метода main и т. д.
Примечание. Окно Стек вызовов аналогично перспективе «Отладка» в некоторых интегрированных средах разработки, например Eclipse.
Изменение потока выполнения
- Дважды нажмите клавишу F11, чтобы запустить функцию std::wcout .
- Приостановив отладчик в вызове метода SendMessage , с помощью мыши захватите желтую стрелку (указатель выполнения) в левой части и переместите ее вверх на одну строку — обратно в std::wcout .
- Нажмите клавишу F11. Отладчик повторно выполнит функцию std::wcout (вы увидите это в выходных данных окна консоли). Изменяя поток выполнения, можно решать множество задач, например тестировать различные пути выполнения кода или повторно выполнять код без перезапуска отладчика.
Предупреждение Как правило, при работе с этой функцией необходимо соблюдать осторожность — вы увидите соответствующее предупреждение во всплывающей подсказке. Могут отображаться и другие предупреждения. При перемещении указателя предыдущее состояние приложения не возвращается.
Следующие шаги
В этом руководстве вы узнали, как запускать отладчик, осуществлять пошаговое выполнение кода и проверять переменные. Возможно, вы захотите получить более полное представление о функциях отладчика, а также воспользоваться ссылками на дополнительные сведения.
Руководство. Отладка консольного приложения .NET с помощью Visual Studio Code
В этом учебнике представлены средства отладки, доступные в Visual Studio Code для работы с приложениями .NET.
Необходимые компоненты
- В этом учебнике используется консольное приложение, созданное в руководстве Создание консольного приложения .NET в Visual Studio Code.
Использование конфигурации отладочной сборки
В .NET используются две встроенные конфигурации сборки — Отладка и Выпуск. Вы воспользуетесь отладочной конфигурацией сборки для отладки и конфигурацией для выпуска для окончательного выпуска программы.
В отладочной конфигурации программы компилируется с полной символической отладочной информацией и без оптимизации. Оптимизация усложняет отладку, поскольку усложняется связь между исходным кодом и сгенерированными инструкциями. Конфигурация для выпуска полностью оптимизирована и не содержит символической отладочной информации.
По умолчанию параметры запуска в Visual Studio Code используют отладочную конфигурацию сборки, поэтому их не нужно изменять перед отладкой.
- Запустите Visual Studio Code.
- Откройте папку проекта, созданную по инструкциям из статьи Создание консольного приложения .NET в Visual Studio Code.
Установка точки останова
Точка останова приостанавливает выполнение приложения на инструкции, предшествующей той строке, в которой установлена точка останова.

- Откройте файл Program.cs.
- Установите точку останова в строке, где отображается имя, дата и время, щелкнув в левом поле окна кода. Левое поле находится слева от номеров строк. Или нажмите клавишу F9 либо выберите в меню пункт Запуск>Перейти к следующей точке останова при выбранной строке кода. Красная точка в левом поле обозначает строку с точкой останова Visual Studio Code.
Настройка входных данных терминала
Точка останова находится после вызова метода Console.ReadLine . Консоль отладки не принимает входные данные терминала для выполняющейся программы. Чтобы использовать выходные данные терминала во время отладки, можно использовать встроенный терминал (одно из окон Visual Studio Code) или внешний терминал. В этом учебнике используется встроенный терминал.
- Папка проекта содержит папку VSCODE . Откройте файл launch.json, который находится в папке VSCODE.
- В файле launch.json измените console параметр с internalConsole integratedTerminal :
"console": "integratedTerminal",
Запуск отладки
- Откройте окно отладки, щелкнув значок «Отладка» в меню слева.

- Щелкните зеленую стрелку в верхней части панели рядом с элементом .NET Core Launch (console) (Запуск .NET Core (консоль)). Еще один способ запуска программы в режиме отладки — нажать клавишу F5 или выбрать в меню пункт Запуск>Начать отладку.

- Перейдите на вкладку «Терминал «, чтобы просмотреть запрос «Что такое ваше имя?», который отображается в программе перед ожиданием ответа.

- Введите строку в окне Терминал в ответ на запрос имени, а затем нажмите клавишу ВВОД . Выполнение программы остановится, когда будет достигнута точка останова, то есть перед выполнением метода Console.WriteLine . В разделе Локальные окна Переменные отображаются значения переменных, которые определены в текущем выполняемом методе.

Использование консоли отладки
Окно Консоль отладки служит для взаимодействия с приложением, которое вы отлаживаете. Вы можете изменить значения переменных и посмотреть, как это повлияет на работу программы.
- Выберите вкладку Консоль отладки.
- Введите name = «Gracie» в запросе в нижней части окна Консоль отладки и нажмите клавишу ВВОД .

- Введите currentDate = DateTime.Parse(«2019-11-16T17:25:00Z»).ToUniversalTime() в нижней части окна Консоль отладки и нажмите клавишу ВВОД . В окне Переменные отображаются новые значения переменных name и currentDate .
- Продолжите выполнение программы, нажав кнопку Продолжить на панели инструментов. Еще один способ продолжить — нажать клавишу F5 .

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

- Нажмите любую клавишу, чтобы выйти из приложения и остановить отладку.
Установка условной точки останова
Программа отображает строку, которую вводит пользователь. Что произойдет, если пользователь ничего не введет? Это можно проверить с помощью полезной функции отладки, которая называется условной точкой останова.

- Щелкните правой кнопкой мыши красную точку, обозначающую точку останова (или щелкните ее, удерживая нажатой клавишу CTRL в macOS). В контекстном меню выберите Изменить точку останова, чтобы открыть диалоговое окно, в котором можно ввести условное выражение.
- Выберите Expression в раскрывающемся списке, введите следующее условное выражение и нажмите клавишу ВВОД .
String.IsNullOrEmpty(name)

При каждом достижении точки останова отладчик вызывает метод String.IsNullOrEmpty(name) и останавливается на этой строке только в том случае, если вызов метода возвращает true . Вместо условного выражения можно указать количество обращений (выполнение программы будет прервано, пока инструкция не будет выполнена указанное количество раз) или условие фильтра (выполнение программы будет прервано на основе таких атрибутов, как идентификатор потока, имя процесса или имя потока).
name == String.Empty
Пошаговое выполнение программы
Visual Studio Code позволяет выполнять программу пошагово, отслеживая результат ее выполнения. Для этого обычно задают точку останова и запускают программу в небольшой части ее кода. Поскольку наша программа невелика, давайте выполним ее пошагово.
- Установите точку останова на открывающей фигурной скобке метода Main .
- Нажмите клавишу F5 , чтобы запустить отладку. Visual Studio Code выделит строку точки останова. На этом этапе в окне Переменные показано, что массив args пуст, а name и currentDate имеют значения по умолчанию.
- Выберите Запуск>Шаг с заходом или нажмите клавишу F11 .
Будет выделена следующая строка. - Выберите Запуск>Шаг с заходом или нажмите клавишу F11 . Visual Studio Code выполняет Console.WriteLine для запроса имени и выделяет следующую строку выполнения. Следующая строка — это Console.ReadLine для name . Окно «Переменные » не изменяется, а вкладка «Терминал » отображает запрос «Что такое ваше имя?».
- Выберите Запуск>Шаг с заходом или нажмите клавишу F11 . Visual Studio выделит назначение переменной name . В окне Переменные видно, что name по-прежнему null .
- Ответьте на этот запрос, введя строку на вкладке «Терминал» и нажав клавишу ВВОД . На вкладке Терминал может не отображаться введенная строка, однако метод Console.ReadLine будет записывать входные данные.
- Выберите Запуск>Шаг с заходом или нажмите клавишу F11 . Visual Studio Code выделит назначение переменной currentDate . В окне Переменные отображается значение, полученное в результате вызова метода Console.ReadLine. На вкладке Терминал также отображается строка, указанная в командной строке.
- Выберите Запуск>Шаг с заходом или нажмите клавишу F11 . В окне Переменные отображается значение переменной currentDate , которому было присвоено свойство DateTime.Now.
- Выберите Запуск>Шаг с заходом или нажмите клавишу F11 . Visual Studio Code вызывает метод Console.WriteLine(String, Object, Object). В окне консоли отображается форматированная строка.
- Выберите Запуск>Шаг с выходом или нажмите клавиши SHIFT + F11 .

- Выберите вкладку Терминал. В окне терминала отобразится сообщение «Нажмите любую клавишу, чтобы выйти. «
- Нажмите любую клавишу для выхода из программы.
Использование конфигурации сборки для выпуска
После тестирования отладочной версии приложения следует скомпилировать и протестировать версию в режиме выпуска. Версию для выпуска компилятор собирает с использованием методов оптимизации, которые могут влиять на поведение приложения. Например, оптимизации компилятора для повышения производительности могут привести к состоянию конкуренции в многопоточных приложениях.
Чтобы создать и протестировать версию консольного приложения для выпуска, откройте терминал и выполните следующую команду:
dotnet run --configuration Release
Дополнительные ресурсы
- Debugging in Visual Studio Code (Отладка в Visual Studio Code)
Следующие шаги
В этом учебнике вы использовали средства отладки Visual Studio Code. В следующем руководстве вы опубликуете развертываемую версию приложения.
Руководство. Отладка кода Visual Basic с помощью Visual Studio
Область применения:
Visual Studio Visual Studio для Mac
Visual Studio Code ![]()
В этом пошаговом руководстве рассматриваются возможности отладчика Visual Studio. Более полное описание функций отладчика см. в статье c Знакомство с отладчиком Visual Studio. При отладке приложения обычно это означает, что приложение запущено с подключенным отладчиком. При выполнении этой задачи отладчик предоставляет множество способов узнать, что делает ваш код во время выполнения. Вы можете пошагово перемещаться по коду и просматривать значения, хранящиеся в переменных, задавать контрольные значения для переменных, чтобы отслеживать изменение значений, изучать путь выполнения кода, просматривать выполнение ветви кода и т. д. Если это упражнение впервые вы пытались отладить код, вам может потребоваться прочитать отладку для абсолютных начинающих , прежде чем пройти эту статью.
Хотя демонстрационное приложение — Visual Basic, большинство функций применимы к C#, C++, F#, Python, JavaScript и другим языкам, поддерживаемым Visual Studio (F# не поддерживает изменение и продолжение). F# и JavaScript не поддерживают окно «Автозапись «). Снимки экрана приведены для Visual Basic.
При работе с этим руководством вы сделаете следующее:
- Запуск отладчика и попадание в точки останова.
- Использование команд для пошагового выполнения кода в отладчике.
- Проверка переменных в подсказках к данным и окнах отладчика.
- Изучение стека вызовов
Необходимые компоненты
У вас должна быть установлена среда Visual Studio 2019 и рабочая нагрузка Кроссплатформенная разработка .NET Core.
Установите Visual Studio бесплатно со страницы скачиваемых материалов Visual Studio, если еще не сделали этого.
Если вам нужно установить рабочую нагрузку, но вы уже используете Visual Studio, выберите пункт Средства>Получить средства и компоненты. , после чего запустится Visual Studio Installer. Запускается Visual Studio Installer. Выберите рабочую нагрузку Кроссплатформенная разработка .NET Core и затем элемент Изменить.
Установите Visual Studio бесплатно со страницы скачиваемых материалов Visual Studio, если еще не сделали этого.
Если вам нужно установить рабочую нагрузку, но вы уже используете Visual Studio, выберите пункт Средства>Получить средства и компоненты. , после чего запустится Visual Studio Installer. Запускается Visual Studio Installer. Выберите рабочую нагрузку Разработка классических приложений .NET и нажмите Изменить.
Создание проекта
Сначала вы создадите проект консольного приложения .NET Core. Для этого типа проекта уже имеются все нужные файлы шаблонов, что избавляет вас от лишней работы.
- Откройте Visual Studio. Если окно запуска не открыто, выберите окно «Пуск файла>«.
- В окне запуска выберите Создание нового проекта.

- В окне создания проекта введите консоль в поле поиска. Затем выберите Visual Basic в списке языков и Windows в списке платформ. После применения фильтров языка и платформы выберите шаблон консольного приложения для .NET Core и нажмите кнопку «Далее«.
Примечание. Если шаблон Консольное приложение отсутствует, его можно установить из окна Создание проекта. В сообщении Не нашли то, что искали? выберите ссылку Установка других средств и компонентов. После этого в Visual Studio Installer выберите рабочую нагрузку Кроссплатформенная разработка .NET Core.

- В окне создания проекта введите консоль в поле поиска. Затем выберите Visual Basic в списке языков и Windows в списке платформ. После применения фильтров языка и платформы выберите шаблон консольного приложения для .NET Core и нажмите кнопку «Далее«.
Примечание. Если шаблон консольного приложения не отображается, его можно установить в окне создания проекта . В сообщении Не нашли то, что искали? выберите ссылку Установка других средств и компонентов. После этого в Visual Studio Installer выберите рабочую нагрузку Разработка классических приложений .NET.
Новый проект открывается в Visual Studio.
Создание приложения
Откройте файл Program.vb и замените все его содержимое по умолчанию следующим кодом:
Imports System Class ArrayExample Public Shared Sub Main() Dim letters As Char() = Dim name As String = "" Dim a As Integer() = New Integer(9) <> For i As Integer = 0 To letters.Length - 1 name += letters(i) a(i) = i + 1 SendMessage(name, a(i)) Next Console.ReadKey() End Sub Private Shared Sub SendMessage(ByVal name As String, ByVal msg As Integer) Console.WriteLine("Hello, " & name & "! Count to " & msg) End Sub End Class
Запуск отладчика

- Нажмите клавишу F5 (Отладка > Начать отладку) или кнопку Начать отладкуна панели инструментов отладки. При нажатии клавиши F5 происходит запуск приложения с присоединенным отладчиком. Но пока мы не сделали ничего особенного, чтобы проанализировать код. Поэтому приложение будет просто загружено, и вы увидите выходные данные консоли.
Hello, f! Count to 1 Hello, fr! Count to 2 Hello, fre! Count to 3 Hello, fred! Count to 4 Hello, fred ! Count to 5 Hello, fred s! Count to 6 Hello, fred sm! Count to 7 Hello, fred smi! Count to 8 Hello, fred smit! Count to 9 Hello, fred smith! Count to 10

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

- Нажмите клавишу F5 (Отладка > Начать отладку) или зеленую кнопку Начать отладку на панели инструментов отладки. При нажатии клавиши F5 происходит запуск приложения с присоединенным отладчиком. Но пока мы не сделали ничего особенного, чтобы проанализировать код. Поэтому приложение будет просто загружено, и вы увидите выходные данные консоли.
Hello, f! Count to 1 Hello, fr! Count to 2 Hello, fre! Count to 3 Hello, fred! Count to 4 Hello, fred ! Count to 5 Hello, fred s! Count to 6 Hello, fred sm! Count to 7 Hello, fred smi! Count to 8 Hello, fred smit! Count to 9 Hello, fred smith! Count to 10

В этом руководстве вы внимательно изучите это приложение с помощью отладчика и ознакомьтесь с функциями отладчика.
Установка точки останова и запуск отладчика
- For В цикле Main функции установите точку останова, щелкнув левое поле в следующей строке кода: name += letters(i) В месте установки точки останова появится красный круг
. Точки останова — это один из самых простых и важных компонентов надежной отладки. Точка останова указывает, где Visual Studio следует приостановить выполнение кода, чтобы вы могли проверить значения переменных или поведение памяти либо выполнение ветви кода. - Нажмите клавишу F5 или кнопку «Начать отладку «.
Приложение запускается, а отладчик выполняется в строке кода, в которой устанавливается точка останова.
Желтая стрелка представляет инструкцию, в которой отладчик приостановлен. Выполнение кода приостанавливается в той же точке (эта инструкция еще не выполняется). Если приложение еще не запущено, F5 запускает отладчик и останавливается в первой точке останова. В противном случае F5 продолжает выполнение приложения до следующей точки останова. Точки останова полезны, если вам известны строка или раздел кода, которые вы хотите подробно рассмотреть. Дополнительные сведения о различных типах точек останова, которые можно задать, например об условных точках останова, см. в разделе Использование точек останова.

- For В цикле Main функции установите точку останова, щелкнув левое поле в следующей строке кода: name += letters(i) В месте установки точки останова появится красный круг . Точки останова — это один из самых простых и важных компонентов надежной отладки. Точка останова указывает, где Visual Studio следует приостановить выполнение кода, чтобы вы могли проверить значения переменных или поведение памяти либо выполнение ветви кода.
- Нажмите клавишу F5 (Отладка > Начать отладку) или кнопку Начать отладку на панели инструментов отладки. Приложение запустится и отладчик перейдет к строке кода, где задана точка останова. Желтая стрелка представляет оператор, на котором отладчик приостановлен, который также приостанавливает выполнение приложения в той же точке (эта инструкция еще не выполняется). Если приложение еще не запущено, F5 запускает отладчик и останавливается в первой точке останова. В противном случае F5 продолжает выполнение приложения до следующей точки останова. Точки останова полезны, если вам известны строка или раздел кода, которые вы хотите подробно рассмотреть. Дополнительные сведения о различных типах точек останова, которые можно задать, например об условных точках останова, см. в разделе Использование точек останова.
Переход по коду в отладчике с помощью пошаговых команд
Здесь мы используем в основном сочетания клавиш, так как они позволяют быстро выполнять приложение в отладчике (эквивалентные команды, например команды меню, отображаются в круглых скобках).
- Хотя выполнение кода приостановлено в цикле For в методе Main , нажмите клавишу F11 (или дважды выберите шаг отладки>), чтобы перейти к вызову SendMessage метода. После двойного нажатия клавиши F11 вы должны находиться на следующей строке кода: SendMessage(name, a(i))
- Еще раз нажмите клавишу F11, чтобы выполнить шаг с заходом в метод SendMessage . Желтый указатель перемещается в метод SendMessage .
F11 — это команда Шаг с заходом, которая выполняет приложение с переходом к следующему оператору. Клавишу F11 удобно использовать для более детальной проверки потока выполнения. (Чтобы ускорить перемещение по коду, мы также показываем некоторые другие варианты.) По умолчанию отладчик пропускает неиспользуемый код (если требуется дополнительные сведения, см . только мой код). Предположим, что вы закончите изучение SendMessage метода, и вы хотите выйти из метода, но остаться в отладчике. Это можно сделать с помощью команды Шаг с выходом. - Нажмите клавиши SHIFT + F11 (или выберите Отладка > Шаг с выходом). Эта команда возобновляет выполнение приложения (и работу отладчика) до возврата данных текущим методом или текущей функции. Вы должны вернуться в цикл For в методе Main , приостановленный на вызове метода SendMessage .
- Нажмите клавишу F11 несколько раз, пока не вернетесь к вызову метода SendMessage .
- Хотя выполнение кода приостановлено при вызове метода, нажмите клавишу F10 (или выберите «Отладка > пошаговые действия») один раз.
Обратите внимание, что отладчик не входит в SendMessage метод. Клавиша F10 перемещает отладчик без захода в функции или методы в коде приложения (код продолжает выполняться). Нажав клавишу F10 (а не F11) в вызове метода SendMessage , мы пропускаем код реализации для SendMessage (пока это нас не интересует). Дополнительные сведения о различных способах перемещения по коду см. в разделе Навигация по коду в отладчике.
В этой статье мы используем сочетания клавиш, так как они позволяют быстро выполнять приложение в отладчике (эквивалентные команды, например команды меню, отображаются в круглых скобках).
- Хотя выполнение кода приостановлено в цикле For в методе Main , нажмите клавишу F11 (или дважды выберите шаг отладки>), чтобы перейти к вызову SendMessage метода. После двойного нажатия клавиши F11 вы должны находиться на следующей строке кода: SendMessage(name, a(i))
- Еще раз нажмите клавишу F11, чтобы выполнить шаг с заходом в метод SendMessage . Желтый указатель перемещается в метод SendMessage .
F11 — это команда Шаг с заходом, которая выполняет приложение с переходом к следующему оператору. Клавишу F11 удобно использовать для более детальной проверки потока выполнения. (Чтобы ускорить перемещение по коду, мы также показываем некоторые другие варианты.) По умолчанию отладчик пропускает неиспользуемый код (если требуется дополнительные сведения, см . только мой код). Предположим, что вы закончите изучение SendMessage метода, и вы хотите выйти из метода, но остаться в отладчике. Это можно сделать с помощью команды Шаг с выходом. - Нажмите клавиши SHIFT + F11 (или выберите Отладка > Шаг с выходом). Эта команда возобновляет выполнение приложения (и работу отладчика) до возврата данных текущим методом или текущей функции. Вы должны вернуться в цикл For в методе Main , приостановленный на вызове метода SendMessage .
- Нажмите клавишу F11 несколько раз, пока не вернетесь к вызову метода SendMessage .
- Хотя выполнение кода приостановлено при вызове метода, нажмите клавишу F10 (или выберите «Отладка > пошаговые действия») один раз.
Обратите внимание, что отладчик не входит в SendMessage метод. Клавиша F10 перемещает отладчик без захода в функции или методы в коде приложения (код продолжает выполняться). Нажав клавишу F10 (а не F11) в вызове метода SendMessage , мы пропускаем код реализации для SendMessage (пока это нас не интересует). Дополнительные сведения о различных способах перемещения по коду см. в разделе Навигация по коду в отладчике.
Переход по коду с помощью команды «Выполнение до щелкнутого»
- Нажмите клавишу F5, чтобы снова перейти к точке останова.
- В редакторе кода прокрутите экран вниз и наведите указатель мыши на Console.WriteLine метод в SendMessage методе, пока не появится зеленая кнопка «Запустить к щелчку «.
Подсказка для кнопки показывает «Выполнить выполнение здесь». 
Примечание. Кнопка Выполнение до щелкнутого впервые появилась в Visual Studio 2017. (Если кнопка с зеленой стрелкой отсутствует, воспользуйтесь клавишей F11, чтобы переместить отладчик в нужное место.)


- Нажмите клавишу F5, чтобы снова перейти к точке останова.
- В редакторе кода прокрутите экран вниз и наведите указатель мыши на Console.WriteLine метод в SendMessage методе, пока не появится зеленая кнопка «Запустить к щелчку «. Подсказка для кнопки показывает «Выполнить выполнение здесь».
- Щелкните кнопку Выполнить до нажатия. Отладчик перемещается к методу Console.WriteLine . Использование этой кнопки аналогично установке временной точки останова. Запуск к щелчку удобно для быстрого обхода в видимой области кода приложения (вы можете выбрать любой открытый файл).
Быстрый перезапуск приложения

Нажмите кнопку «Перезапустить« на панели инструментов отладки (CTRL + SHIFT + F5).
Кнопка Перезапустить позволяет сэкономить время, затрачиваемое на остановку приложения и перезапуск отладчика. Отладчик приостанавливается в первой точке останова, достигнутой при выполнении кода.
Отладчик еще раз останавливается в точке останова, ранее заданной вами в цикле For .
Чтобы перезапустить приложение, нажмите сочетание клавиш CTRL + SHIFT + F5. Такое действие гораздо быстрее, чем остановка приложения и перезапуск отладчика. Отладчик приостанавливается в первой точке останова, достигнутой при выполнении кода.
Отладчик еще раз останавливается в точке останова, ранее заданной вами в цикле For .
Проверка переменных с помощью подсказок по данным
Функции, позволяющие проверять переменные, являются самыми полезными возможностями отладчика. Реализовывать эту задачу можно разными способами. Часто при попытке отладки проблемы вы пытаетесь выяснить, хранят ли переменные значения, которые они ожидают, в определенное время.

- Хотя выполнение кода приостановлено в name += letters[i] инструкции, наведите указатель мыши на letters переменную и увидите его значение по умолчанию, значение первого элемента в массиве. «f»c
- Затем наведите указатель мыши на переменную name , чтобы просмотреть ее текущее значение — пустую строку.
- Несколько раз нажмите клавишу F5 (или выберите Отладка>Продолжить), чтобы выполнить несколько итераций по циклу For , каждый раз снова приостанавливая выполнение в точке останова и наводя указатель мыши на переменную name , чтобы просмотреть ее значение. Значение переменной изменяется при каждой итерации цикла For — f , затем fr , fre и т. д. Часто при отладке требуется быстрый способ проверка значений свойств в переменных, чтобы узнать, хранят ли они значения, которые вы ожидаете хранить, и советы по данным являются хорошим способом для этого.
Функции, позволяющие проверять переменные, являются самыми полезными возможностями отладчика. Реализовывать эту задачу можно разными способами. Часто при попытке отладки проблемы вы пытаетесь выяснить, хранят ли переменные значения, которые они ожидают, в определенное время.

- Хотя выполнение кода приостановлено в name += letters[i] инструкции, наведите указатель мыши на letters переменную и увидите его значение по умолчанию, значение первого элемента в массиве. «f»c
- Затем наведите указатель мыши на переменную name , чтобы просмотреть ее текущее значение — пустую строку.
- Несколько раз нажмите клавишу F5 (или выберите Отладка>Продолжить), чтобы выполнить несколько итераций по циклу For , каждый раз снова приостанавливая выполнение в точке останова и наводя указатель мыши на переменную name , чтобы просмотреть ее значение. Значение переменной изменяется при каждой итерации цикла For — f , затем fr , fre и т. д. Часто при отладке требуется быстрый способ проверка значений свойств в переменных, чтобы узнать, хранят ли они значения, которые вы ожидаете хранить, и советы по данным являются хорошим способом для этого.
Проверка переменных с помощью окон «Видимые» и «Локальные»

- Взгляните на окно Видимые в нижней части редактора кода. Если он закрыт, откройте его, пока выполнение кода приостановлено в отладчике, выбрав «Отладка>Windows>Autos«. В окне Видимые отображаются переменные и их текущие значения. В окне Видимые отображаются все переменные, используемые в текущей или предыдущей строке (сведения о зависящем от языка поведении см. в соответствующей документации).
- Затем посмотрите на окно Локальные на вкладке рядом с окном Видимые.
- Разверните переменную letters , чтобы отобразить элементы, которые она содержит. В окне Локальные показаны переменные, которые находятся в текущей области, то есть текущем контексте выполнения.

- Взгляните на окно Видимые в нижней части редактора кода. Если он закрыт, откройте его, пока выполнение кода приостановлено в отладчике, выбрав «Отладка>Windows>Autos«. В окне Видимые отображаются переменные и их текущие значения. В окне Видимые отображаются все переменные, используемые в текущей или предыдущей строке (сведения о зависящем от языка поведении см. в соответствующей документации).
- Затем посмотрите на окно Локальные на вкладке рядом с окном Видимые.
- Разверните переменную letters , чтобы отобразить элементы, которые она содержит. В окне Локальные показаны переменные, которые находятся в текущей области, то есть текущем контексте выполнения.
Установка контрольного значения
В основном окне редактора кода щелкните правой кнопкой мыши переменную name и выберите команду Добавить контрольное значение.
В нижней части редактора кода откроется окно Контрольное значение. В окне Контрольное значение можно указать переменную (или выражение), которую необходимо отслеживать.
Теперь у вас есть контрольное значение, заданное для переменной name , и по мере перемещения по отладчику вы можете наблюдать за изменением его значения. В отличие от других окон переменных, окно «Контроль» всегда отображает переменные, которые вы просматриваете (они серые при выходе из область).
Вы можете указать переменную или выражение, которое необходимо отслеживать во время поэтапного выполнения кода, добавив его в окно контрольных значений.
- Когда отладчик будет приостановлен, щелкните правой кнопкой мыши переменную name и выберите Добавить контрольное значение. В нижней части редактора кода по умолчанию откроется окно контрольных значений.
- Теперь, когда вы установили контрольное значение для переменной name , пошагово выполните код, чтобы увидеть, как значение переменной name меняется с каждой итерацией цикла for . В отличие от других окон переменных, в окне «Контрольные данные» всегда отображаются переменные, которые вы просматриваете. Переменные, не область, отображаются как недоступные.
Дополнительные сведения о окне «Просмотр» см. в разделе «Просмотр переменных» с окнами «Просмотр».
Изучение стека вызовов

- Хотя выполнение кода приостановлено в цикле For , выберите окно стека вызовов, которое по умолчанию открыто в нижней правой области. Если он закрыт, откройте его, пока выполнение кода приостановлено в отладчике, выбрав отладку>стека вызовов Windows.>
- Несколько раз нажмите клавишу F11, пока отладчик не приостановится в методе SendMessage . Взгляните на окно Стек вызовов. В окне Стек вызовов показан порядок вызова методов и функций. В верхней строке приведена текущая функция (в данном приложении метод SendMessage ). Во второй строке показано, что функция SendMessage была вызвана из метода Main и т. д.
Примечание. Окно Стек вызовов аналогично перспективе «Отладка» в некоторых интегрированных средах разработки, например Eclipse.

- Пока выполнение кода приостановлено в цикле For , выберите окно стека вызовов, которое по умолчанию открыто в правой нижней области. Если он закрыт, откройте его, пока выполнение кода приостановлено в отладчике, выбрав отладку>стека вызовов Windows.>
- Несколько раз нажмите клавишу F11, пока отладчик не приостановится в методе SendMessage . Взгляните на окно Стек вызовов. В окне Стек вызовов показан порядок вызова методов и функций. В верхней строке приведена текущая функция (в данном приложении метод SendMessage ). Во второй строке показано, что функция SendMessage была вызвана из метода Main и т. д.
Примечание. Окно Стек вызовов аналогично перспективе «Отладка» в некоторых интегрированных средах разработки, например Eclipse.
Изменение потока выполнения
- Дважды нажмите клавишу F11, чтобы запустить метод Console.WriteLine .
- При приостановке SendMessage вызова метода с помощью отладчика используйте мышь для захвата желтой стрелки или указателя выполнения (в левом поле) и перетащите указатель вверх по одной строке в инструкцию Console.WriteLine .
- Нажмите клавишу F11. Отладчик повторно запускает Console.WriteLine метод (это действие отображается в выходных данных окна консоли). Изменяя поток выполнения, можно решать множество задач, например тестировать различные пути выполнения кода или повторно выполнять код без перезапуска отладчика.
Предупреждение Как правило, при работе с этой функцией необходимо соблюдать осторожность — вы увидите соответствующее предупреждение во всплывающей подсказке. Могут также появиться другие предупреждения. При перемещении указателя предыдущее состояние приложения не возвращается.
Следующие шаги
В этом руководстве вы узнали, как запускать отладчик, осуществлять пошаговое выполнение кода и проверять переменные. Возможно, вы захотите получить более полное представление о возможностях отладчика, а также воспользоваться ссылками на дополнительные материалы.
