Руководство по отладке кода C# с помощью Visual Studio
В этой статье представлены функции отладчика Visual Studio в пошаговом руководстве. Если вы хотите получить общее представление о функциях отладчика, см. раздел Первый взгляд на отладчик. При отладке вашего приложенияэто обычно означает, что вы запускаете приложение с подключённым отладчиком. При выполнении этой задачи отладчик предоставляет множество способов узнать, что делает ваш код во время выполнения. Вы можете поэтапно выполнить отладку кода и просмотреть значения, хранящиеся в переменных, установить наблюдение за переменными, чтобы увидеть, когда изменяются значения. Можно изучить путь выполнения кода, узнать, выполняется ли ветвь кода, и так далее. Если это упражнение — ваш первый опыт отладки кода, вам может быть полезно прочитать «Отладка для абсолютных начинающих» перед тем, как приступить к чтению этой статьи.
Хотя демонстрационное приложение написано на C#, большинство функций применимо к C++, Visual Basic, F#, Python, JavaScript и другим языкам, поддерживаемым Visual Studio (F# не поддерживает функцию Edit-and-continue. F# и JavaScript не поддерживают окно Autos). Снимки экрана находятся на C#.
В этом руководстве описано следующее:
- Запустите отладчик и нажмите точки останова.
- Изучите команды для пошагового выполнения кода в отладчике
- Инспектирование переменных в подсказках по данным и окнах отладчика
- Проверка стека вызовов
Необходимые условия
Необходимо установить Visual Studio 2022 и пакет компонентов для разработки настольных приложений .NET.
Необходимо установить Visual Studio 2019 и рабочую нагрузку кроссплатформенной разработки .NET Core.
Если вы еще не установили Visual Studio, перейдите на страницу Visual Studio загрузки, чтобы установить его бесплатно.
Если необходимо установить рабочую нагрузку, но у вас уже есть Visual Studio, перейдите в раздел Tools>Get Tools and Features..., который открывает установщик Visual Studio. Установщик Visual Studio запускается. Выберите пакет кроссплатформенной разработки .NET Core, а затем выберите Изменить.
Если у вас уже есть Visual Studio, но рабочая нагрузка для разработки настольных приложений .NET не установлена, перейдите к Инструменты>Get Tools and Features..., что запустит Visual Studio Installer. В установщике Visual Studio выберите рабочую среду для разработки классических приложений .NET , а затем выберите Изменить.
Создание проекта
Сначала вы создадите проект консольного приложения .NET Core. Тип проекта включает в себя все необходимые шаблонные файлы, прежде чем вы что-либо добавите!
Откройте Visual Studio. Если окно запуска не открыто, выберите Файл>Окно запуска.
В окне запуска выберите Создать проект.
В окне Создание нового проекта введите console в поле поиска. Затем выберите C# в списке языков, а затем выберите Windows из списка платформ.
После применения фильтров языка и платформы выберите шаблон консольного приложения для .NET Core, а затем выберите Далее.
Заметка
Если шаблон консольного приложения не отображается, его можно установить в окне Создание нового проекта. В сообщении "Не можете найти то, что ищете?" выберите ссылку "Установить больше инструментов и функций". Затем в установщике Visual Studio выберите пакет кроссплатформенной разработки .NET Core.
В окне Настройка нового проекта введите GetStartedDebugging в поле имени проекта . Затем выберите Далее.
Выберите рекомендуемую целевую платформу (.NET 8.0 или долгосрочную поддержку), а затем выберите Создать.
В окне Создание нового проекта введите console в поле поиска. Затем выберите C# в списке языков, а затем выберите Windows из списка платформ.
После применения фильтров языка и платформы выберите шаблон консольного приложения, а затем выберите Далее.
Заметка
Если шаблон консольного приложения не отображается, вы можете установить его из окна создания нового проекта. В сообщении "Не можете найти то, что ищете?" выберите ссылку "Установить больше инструментов и функций". Затем в установщике Visual Studio выберите рабочую нагрузку разработки десктопных приложений .NET.
В окне Настройка нового проекта введите GetStartedDebugging в поле имени проекта . Затем выберите Далее.
В окне Дополнительные сведения убедитесь, что .NET 8.0 выбран в раскрывающемся меню Framework, а затем выберите Создать.
Visual Studio открывает новый проект.
Создание приложения
В Program.csзамените весь код по умолчанию следующим кодом:
using System;
class ArrayExample
{
static void Main()
{
char[] letters = { 'f', 'r', 'e', 'd', ' ', 's', 'm', 'i', 't', 'h'};
string name = "";
int[] a = new int[10];
for (int i = 0; i < letters.Length; i++)
{
name += letters[i];
a[i] = i + 1;
SendMessage(name, a[i]);
}
Console.ReadKey();
}
static void SendMessage(string name, int msg)
{
Console.WriteLine("Hello, " + name + "! Count to " + msg);
}
}
Запустите отладчик!
Нажмите 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
В этом руководстве вы внимательно изучите это приложение с помощью отладчика и ознакомьтесь с функциями отладчика.
Остановите отладчик, нажав красную кнопку остановки (SHIFT + F5).
В окне консоли нажмите клавишу, чтобы закрыть окно консоли.
В основном здесь мы используем сочетания клавиш, так как это быстрый способ выполнения команд отладчика. Также отмечаются эквивалентные команды, такие как панели инструментов или команды меню.
Чтобы запустить отладчик, выберите 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
Чтобы остановить отладчик, выберите Shift+F5или нажмите кнопку Остановить отладку на панели инструментов отладки, или выберите Отладка>Остановить отладку в строке меню.
В окне консоли выберите любой ключ, чтобы закрыть окно консоли.
Установка точки останова и запуск отладчика
В цикле
for
функцииMain
установите точку останова, щелкнув левое поле в следующей строке кода:name += letters[i];
Красный круг
отображается там, где вы ее устанавливаете.
Точки останова являются одной из самых основных и важных функций надежной отладки. Точка останова указывает, где Visual Studio должна приостановить выполнение вашего кода, чтобы вы могли просмотреть значения переменных, поведение памяти или выяснить, выполняется ли ветвление кода.
Нажмите F5 или кнопку Начать отладку.
Приложение запускается, и отладчик останавливается на строке кода, в которой установлена точка останова.
Желтая стрелка показывает оператор, на котором остановлен отладчик, что также приостанавливает выполнение приложения в этой же точке (этот оператор еще не был выполнен).
Если приложение еще не запущено, F5 запускает отладчик и останавливается в первой точке останова. В противном случае F5 продолжает запускать приложение до следующей точки останова.
Точки останова — это полезная функция, когда вы знаете строку кода или раздел кода, который необходимо подробно изучить. Сведения о различных типах точек останова, которые можно задать, например условные точки останова, см. в разделе Использование точек останова.
В цикле
for
функцииMain
установите точку останова, щелкнув левое поле в следующей строке кода:name += letters[i];
Появится красный круг, в котором устанавливается точка останова.
Точки останова являются важной функцией надежной отладки. Вы можете задать точки останова, в которых Visual Studio приостанавливает выполнение кода, чтобы просмотреть значения переменных или поведение памяти или узнать, выполняется ли ветвь кода.
Чтобы начать отладку, выберите F5или нажмите кнопку "Цель отладки" на стандартной панели инструментов или нажмите кнопку "Запуск отладки" на панели инструментов "Отладка" или выберите Отладка>Запуск отладки в строке меню. Приложение запускается, а отладчик останавливается на строке кода, где устанавливается точка останова.
Желтая стрелка указывает на инструкцию, на которой отладчик приостановился. Выполнение приложения приостановлено в том же месте, при этом инструкция еще не выполнена.
Если приложение не запущено, F5 запускает отладчик, который запускает приложение, пока не достигнет первой точки останова. Если приложение приостановлено в точке останова, F5 продолжит работу приложения, пока не достигнет следующей точки останова.
Точки останова — это полезная функция, когда вы знаете строку или раздел кода, которые необходимо подробно изучить. Дополнительные сведения о различных типах точек останова, таких как условные точки останова, см. в разделе Использование точек останова.
Навигация по коду и инспекция данных с помощью информационных подсказок
В основном мы используем сочетания клавиш здесь, так как это хороший способ быстро выполнять приложение в отладчике (эквивалентные команды, такие как команды меню, отображаются в скобках).
Хотя выполнение кода приостановлено в инструкции
name += letters[i]
, наведите указатель мыши на переменнуюletters
и отображается значение по умолчанию, значение первого элемента в массивеchar[10]
.Функции, которые позволяют проверять переменные, являются одним из самых полезных функций отладчика, и существуют различные способы его выполнения. Часто при попытке отладки проблемы вы пытаетесь выяснить, хранят ли переменные значения, которые вы ожидаете от них в определенный момент времени.
Разверните переменную
letters
, чтобы просмотреть его свойства, которые включают все элементы, содержащиеся в переменной.Затем наведите указатель мыши на переменную
name
и увидите его текущее значение, пустую строку.Нажмите F10 (или выберите Отладка > Шаг через) дважды, чтобы перейти к вызову метода
SendMessage
, а затем нажмите F10 еще раз.F10 перемещает отладчик к следующей инструкции без перехода к функциям или методам в коде приложения (код по-прежнему выполняется). Нажав клавишу F10 на вызове метода
SendMessage
, мы пропустили код реализации дляSendMessage
(что, возможно, нам не интересно сейчас).Нажмите клавишу F10 (или Отладка>Шаг за шагом) несколько раз, чтобы выполнить итерации через цикл
for
, останавливаясь на точке останова, и наведите указатель мыши на переменнуюname
каждый раз, чтобы проверить ее значение.Значение переменной изменяется с каждой итерацией цикла
for
, отображая значенияf
, а затемfr
, а затемfre
и т. д. Чтобы ускорить работу отладчика в этом сценарии, можно нажать клавишу F5 (или выбрать Отладка>Продолжить), что переместит вас к контрольной точке вместо следующего выражения.Часто при отладке требуется быстрый способ проверить значения свойств в переменных, чтобы узнать, хранят ли они значения, которые вы ожидаете хранить, и советы по данным являются хорошим способом для этого.
Пока выполнение кода остается приостановленным в цикле
for
в методеMain
, нажимайте F11 (или выберите Отладка > Шагнуть внутрь), пока выполнение не будет приостановлено на вызове методаSendMessage
.Вам следует находиться на этой строке кода:
SendMessage(name, a[i]);
Нажмите F11 еще раз, чтобы перейти к методу
SendMessage
.Желтый указатель перемещается в метод
SendMessage
.F11 — это команда Войти в, которая продвигает выполнение приложения на одну инструкцию за раз. F11 — это хороший способ изучения потока выполнения в наиболее подробной форме. По умолчанию отладчик пропускает непользовательский код (если требуются дополнительные сведения, см. Только Мой Код).
Предположим, что вы закончили изучать метод
SendMessage
и хотите выйти из него, но остаться в отладчике. Это можно сделать с помощью команды Step Out.Нажмите Shift + F11 (или Отладка > Выйти из отладки).
Эта команда возобновляет выполнение приложения (и перемещает отладчик), пока текущий метод или функция не возвращается.
Вы должны вернуться в цикл
for
в методеMain
, приостановленный при вызове методаSendMessage
. Дополнительные сведения о различных способах перемещения по коду см. в разделе Навигация по коду в отладчике.
Хотя выполнение кода приостановлено в инструкции
name += letters[i]
, наведите указатель мыши на переменнуюletters
, чтобы увидеть подсказку данных с размером массива и типом элемента,char[10]
.Заметка
Одним из наиболее полезных функций отладчика является возможность проверки переменной. Часто при попытке отладки проблемы вы пытаетесь выяснить, имеют ли переменные значения, ожидаемые в определенное время. Проверка с помощью подсказок по данным — хороший способ сделать это.
Разверните переменную
letters
, чтобы просмотреть все его элементы массива и их значения.Наведите указатель мыши на переменную
name
, чтобы увидеть текущее значение, которое является пустой строкой.Чтобы перейти в отладчике к следующей инструкции, выберите F10или нажмите кнопку "Шаг с обходом" на панели инструментов отладки, или выберите Отладка>Шаг с обходом в строке меню. Выберите F10 ещё дважды, чтобы пройти вызов метода
SendMessage
.F10 продвигает отладку без входа в функцию или метод, даже если их код все равно выполняется. Таким образом, мы пропустили отладку кода в методе
SendMessage
, так как на данный момент это нас не интересует.Чтобы выполнить итерацию по циклу
for
несколько раз, выберите F10 многократно. Во время каждой итерации цикла останавливайтесь на точке останова, а затем наведите указатель мыши на переменнуюname
, чтобы проверить её значение во всплывающей подсказке.Значение переменной изменяется с каждой итерацией цикла
for
, отображая значенияf
, а затемfr
, а затемfre
и т. д. Чтобы ускорить переход отладчика через цикл, выберите F5. Это позволит перейти к контрольной точке вместо следующей инструкции.Пока выполнение кода приостановлено в цикле
for
методаMain
, выберите F11или нажмите кнопку Шаг в (Step Into) на панели инструментов отладки, или выберите из строки меню >Шаг в (Step Into), пока не перейдете к вызову методаSendMessage
.Отладчик должен быть приостановлен в этой строке кода:
SendMessage(name, a[i]);
Чтобы перейти к методу
SendMessage
, снова выберите F11.Желтый указатель перемещается в метод
SendMessage
.F11 помогает более подробно изучить поток выполнения кода. Чтобы перейти к методу из вызова метода, выберите F11. По умолчанию отладчик пропускает вход в непользовательские методы. Дополнительные сведения об отладке неиспользуемого кода см. в статье Just My Code.
Завершив отладку метода
SendMessage
, вы будете готовы вернуться к циклуfor
методаmain
.Чтобы выйти из метода
SendMessage
, выберите Shift+F11или нажмите кнопку Шаг выхода на панели инструментов отладки, или выберите Отладка>Шаг выхода в строке меню.шаг выхода возобновляет выполнение приложения и перемещает отладчик до тех пор, пока текущий метод или функция не возвращается.
Вы увидите желтый указатель обратно в цикл
for
методаMain
, приостановленный при вызове методаSendMessage
. Дополнительные сведения о различных способах перемещения по коду см. в разделе Навигация по коду в отладчике.
Навигация по коду с помощью "Выполнить до щелчка"
Выберите F5, чтобы перейти к точке останова еще раз.
В редакторе кода прокрутите страницу вниз и наведите указатель мыши на метод
Console.WriteLine
в методеSendMessage
, пока не появится зеленая кнопка "Запустить к нажатию". Логотип кнопки "Запустить к нажатию". Подсказка на кнопке показывает "Запустить выполнение до этого места".
Заметка
Кнопка "Запустить для нажатия" новая в Visual Studio 2017. (Если вы не видите зеленую кнопку со стрелкой, используйте F11 в этом примере, чтобы переместить отладчик в нужное место.)
Нажмите кнопку Выполнить, чтобы нажать кнопку.
Отладчик переходит к методу
Console.WriteLine
.Эта кнопка аналогична настройке временной точки останова. Запуск по щелчку удобно для быстрого перемещения в пределах видимой области кода приложения (можно выбирать в любом открытом файле).
Выберите F5, чтобы перейти к точке останова еще раз.
В редакторе кода наведите указатель мыши на вызов метода
Console.WriteLine
в методеSendMessage
, пока не появится кнопка "Run to Click". Подсказка на кнопке показывает "Запустить выполнение до этого места".Нажмите кнопку Запустить, чтобы нажать кнопку. Кроме того, с курсором в инструкции
Console.WriteLine
выберите CTRL+F10. Или щелкните правой кнопкой мыши вызов методаConsole.WriteLine
и выберите Выполнить до курсора в контекстном меню.Отладчик переходит к вызову метода
Console.WriteLine
.Использование кнопки "Запустить" для нажатия аналогично настройке временной точки останова и удобно быстро перемещаться в видимой области кода приложения в открытом файле.
Быстро перезапустите приложение
Нажмите кнопку перезапуска на панели инструментов отладки (CTRL + SHIFT + F5).
При нажатии Перезапусквремя экономится по сравнению с остановкой приложения и перезапуском отладчика. Отладчик приостанавливается в первой точке останова, которая достигается выполнением кода.
Отладчик снова останавливается в точке останова, заданной ранее в цикле for
.
Чтобы повторно запустить приложение с самого начала в отладчике, выберите CTRL+SHIFT+F5или нажмите кнопку Перезапуск на панели инструментов отладки или выберите Отладка>перезапустить в строке меню.
Перезапуск останавливает отладчик, а затем перезапускает его за один шаг. Когда отладчик перезапускается, он доходит до первой точки останова, которая является точкой останова, ранее установленной внутри цикла for
, а затем приостанавливается.
Проверка переменных с помощью окон "Авто" и "Локальные"
Посмотрите на окно автопеременных в нижней части редактора кода.
Если он закрыт, откройте его, приостановив выполнение в отладчике, выбрав Отладка>Windows>Авто.
В окне Авто отображаются переменные и их текущее значение. В окне Авто отображаются все переменные, используемые в текущей строке или предыдущей строке (Проверяйте документацию для поведения, специфичного для языка).
Затем просмотрите окно Локальные, которое находится на вкладке рядом с окном Автозапуск.
Разверните переменную
letters
, чтобы отобразить элементы, содержащиеся в ней.В окне Локальные отображаются переменные, находящиеся в текущей области видимости, то есть в текущем контексте выполнения.
При отладке окна Автос и Локалы отображают значения переменных. Окна доступны только во время сеанса отладки. В окне Автосодержимое отображаются переменные, используемые на текущей строке, на которой находится отладчик, и на предыдущей строке. В окне "Locals" отображаются переменные, определенные в локальной области, которая, как правило, соответствует текущей функции или методу.
Пока отладчик приостановлен, просмотрите окно 'Автоматически' в нижней части редактора кода.
Если окно Autos закрыто, выберите Ctrl+D, Aили выберите Debug>Windows>Autos в строке меню.
Пока отладчик остается приостановленным, просмотрите окно Локальные на вкладке рядом с окном Авто.
Если окно локальных закрыто, выберите CTRL+D, Lили выберите Отладка>Windows>Локальные.
В окне Локальные разверните переменную
letters
, чтобы просмотреть элементы массива и их значения.
Дополнительные сведения об окнах Autos и Locals см. в разделе "Проверка переменных в окнах Autos и Locals".
Установка часов
В главном окне редактора кода щелкните правой кнопкой мыши переменную name
и выберите Добавить наблюдение.
Окно "Просмотр" откроется в нижней части редактора кода. Можно использовать окно наблюдения для указания переменной (или выражения), за которой вы хотите следить.
Теперь вы установили точку наблюдения на переменной name
и можете видеть, как ее значение изменяется при переходе через отладчик. В отличие от других окон переменных, окно Наблюдения всегда отображает переменные, которые вы отслеживаете (они становятся серыми, когда находятся вне области видимости).
Вы можете указать переменную или выражение, за которыми вы хотите наблюдать, исполняя код, добавив их в окно Watch.
Пока отладчик приостановлен, щелкните правой кнопкой мыши переменную
name
и выберите Добавить в наблюдение.Окно "Просмотр" открывается в нижней части редактора кода по умолчанию.
Теперь, когда вы установили слежение за переменной
name
, пройдитесь по своему коду, чтобы увидеть, как значение переменнойname
изменяется при каждой итерации циклаfor
.В отличие от других окон переменных, в окне всегда отображаются переменные, которые вы просматриваете. Переменные, вышедшие за пределы области видимости, отображаются как недоступные.
Дополнительные сведения об окне Просмотр можно найти в разделе Просмотр переменных с помощью оконПросмотр.
Проверка стека вызовов
Хотя выполнение кода приостановлено в цикле
for
, выберите окно стек вызовов, которое по умолчанию открыто в правой нижней области.Если он закрыт, откройте его, приостановив выполнение в отладчике и выбрав Отладка>Windows>Стек вызовов.
Выберите F11 несколько раз, пока отладчик не приостановит выполнение в методе
SendMessage
. Просмотрите окно стека вызовов.В окне стека вызовов показан порядок вызова методов и функций. В верхней строке показана текущая функция (метод
SendMessage
в этом приложении). Вторая строка показывает, чтоSendMessage
был вызван из методаMain
и т. д.Заметка
Окно стек вызовов похоже на режим отладки в некоторых IDE, таких как Eclipse.
Стек вызовов — это хороший способ изучить и понять поток выполнения приложения.
Вы можете дважды щелкнуть строку кода, чтобы просмотреть этот исходный код, который также изменяет текущую область при проверке отладчиком. Это действие не перемещает отладчик.
Вы также можете использовать меню правой кнопкой мыши из окна стек вызовов для выполнения других действий. Например, можно вставить точки останова в указанные функции, продвинуть отладчик с помощью Запустить до курсораи изучить исходный код. Дополнительные сведения см. в разделе "Практическое руководство: Изучение стека вызовов".
стек вызовов поможет вам понять поток выполнения приложения, показывая порядок вызова методов и функций.
Пока отладчик приостановлен в цикле
for
, просмотрите окно стека вызовов , которое по умолчанию открывается в правой нижней панели редактора кода.Если окно стека вызовов закрыто, выберите CTRL+D, Cили выберите Отладка>Windows>стек вызовов в строке меню.
В окне стека вызовов вы видите желтый указатель, указывающий на текущий метод
Main
.Выберите F11 несколько раз, пока отладчик не приостановит выполнение в методе
SendMessage
.В верхней строке окна стека вызовов отображается текущая функция, которая является методом
SendMessage
. Вторая строка показывает, что методSendMessage
был вызван из методаMain
.Заметка
Окно стека вызовов похоже на окно отладки в некоторых средах разработки, таких как Eclipse.
В окне Стек вызовов можно дважды щелкнуть по строке кода, чтобы перейти к этому исходному коду, что изменяет текущую область видимости, проверяемую отладчиком. Это действие не перемещает отладчик.
Вы также можете использовать меню правой кнопкой мыши из окна стек вызовов для выполнения других действий. Например, можно вставить точки останова в указанные функции, выполнить отладку с помощью Выполнить до курсораили перейти к исходному коду.
Дополнительные сведения о стеке вызовов см. в разделе "Как изучить стек вызовов".
Дальнейшие действия
В этом руководстве вы узнали, как запустить отладчик, пошагово выполнить код и проверить переменные. Вам может потребоваться получить высокоуровневый обзор функций отладчика вместе со ссылками на дополнительные сведения.