Руководство. Отладка кода Visual Basic с помощью Visual Studio
В этом пошаговом руководстве рассматриваются возможности отладчика 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.
В окне "Настройка нового проекта" введите команду get-started-debugging в поле "Имя проекта". Затем выберите Далее.
Выберите рекомендуемую целевую платформу (.NET 8.0 или долгосрочную поддержку), а затем нажмите кнопку "Создать".
В окне создания проекта введите консоль в поле поиска. Затем выберите Visual Basic в списке языков и Windows в списке платформ.
После применения фильтров языка и платформы выберите шаблон консольного приложения для .NET Core и нажмите кнопку "Далее".
Примечание.
Если шаблон консольного приложения не отображается, его можно установить в окне создания проекта . В сообщении Не нашли то, что искали? выберите ссылку Установка других средств и компонентов. После этого в Visual Studio Installer выберите рабочую нагрузку Разработка классических приложений .NET.
В окне "Настройка нового проекта" введите команду get-started-debugging в поле "Имя проекта". Затем выберите Далее.
В окне "Дополнительные сведения" убедитесь, что в раскрывающемся меню Платформы выбрана .NET 8.0, а затем нажмите кнопку "Создать".
Новый проект открывается в Visual Studio.
Создание приложения
Откройте файл Program.vb и замените все его содержимое по умолчанию следующим кодом:
Imports System
Class ArrayExample
Public Shared Sub Main()
Dim letters As Char() = {"f"c, "r"c, "e"c, "d"c, " "c, "s"c, "m"c, "i"c, "t"c, "h"c}
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
В этом руководстве вы внимательно изучите это приложение с помощью отладчика и ознакомьтесь с функциями отладчика.
Остановите отладчик, нажав красную кнопку остановки (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 продолжает выполнение приложения до следующей точки останова.
Точки останова полезны, если вам известны строка или раздел кода, которые вы хотите подробно рассмотреть. Дополнительные сведения о различных типах точек останова, которые можно задать, например об условных точках останова, см. в разделе Использование точек останова.
Переход по коду в отладчике с помощью пошаговых команд
Здесь мы используем в основном сочетания клавиш, так как они позволяют быстро выполнять приложение в отладчике (эквивалентные команды, например команды меню, отображаются в круглых скобках).
Хотя выполнение кода приостановлено в цикле
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, чтобы переместить отладчик в нужное место.)
Щелкните кнопку Выполнить до нажатия.
Отладчик перемещается к методу
Console.WriteLine
.Использование этой кнопки аналогично установке временной точки останова. Запуск к щелчку удобно для быстрого обхода в видимой области кода приложения (вы можете выбрать любой открытый файл).
Нажмите клавишу 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
метод (это действие отображается в выходных данных окна консоли).Изменяя поток выполнения, можно решать множество задач, например тестировать различные пути выполнения кода или повторно выполнять код без перезапуска отладчика.
Предупреждение
Как правило, при работе с этой функцией необходимо соблюдать осторожность — вы увидите соответствующее предупреждение во всплывающей подсказке. Могут также появиться другие предупреждения. При перемещении указателя предыдущее состояние приложения не возвращается.
Чтобы продолжить выполнение приложения, нажмите клавишу F5.
Поздравляем с завершением этого учебника!
Следующие шаги
В этом руководстве вы узнали, как запускать отладчик, осуществлять пошаговое выполнение кода и проверять переменные. Возможно, вы захотите получить более полное представление о возможностях отладчика, а также воспользоваться ссылками на дополнительные материалы.