Основные сведения об отладчике .NET в Visual Studio Code

Завершено

Из предыдущего урока вы узнали, что отладчик помогает управлять выполнением программы и наблюдать за ее состоянием. В этом разделе показано, как выполнить обе эти задачи в Visual Studio Code.

Для начала давайте узнаем, как настроить отладчик Visual Studio Code для работы в .NET.

Настройка Visual Studio Code для отладки в .NET

Когда вы впервые открываете файл C# в Visual Studio Code, появляется запрос на установку рекомендуемых расширений для C#.

Screenshot of Visual Studio Code prompt to install the C# extension.

Visual Studio Code установит расширение C# и отобразит еще один запрос на добавление необходимых ресурсов для сборки и отладки проекта.

Screenshot of Visual Studio Code prompt to add required assets to build and debug your .NET project.

Примечание.

Поддержка языка C# включается в Visual Studio Code путем необязательной установки из Marketplace. Visual Studio Code автоматически предлагает установить это расширение, если у вас его нет, при открытии любого файла C#. Если у вас есть проблемы с созданием или отладкой приложения .NET в Visual Studio Code, прежде всего убедитесь, что в проекте есть необходимые ресурсы для включения поддержки языка C#.

Точки останова

Как вы узнали из предыдущего урока, отладчик помогает анализировать и контролировать выполнение программы. При запуске отладчик Visual Studio Code немедленно начинает выполнение предоставленного кода. Так как код выполняется быстро, требуется возможность приостановить выполнение программы на любом операторе. Для этого используются точки останова.

Вы можете добавить точку останова в Visual Studio Code, щелкнув в левой части номера строки в строке, которую вы хотите разбить. После включения точки останова отобразится красная точка. Чтобы удалить точку останова, просто щелкните красную точку еще раз.

Screenshot of a breakpoint added in the Visual Studio Code editor window.

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

Screenshot of setting a conditional breakpoint in Visual Studio Code.

Обзор отладчика Visual Studio Code

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

Screenshot of Visual Studio Code debugger overview.

  1. Элементы управления для запуска отладчика
  2. Состояние переменных
  3. Состояние наблюдаемых переменных
  4. Текущий стек вызовов
  5. Точки останова
  6. Элементы управления выполнением
  7. Текущий шаг выполнения
  8. Консоль отладки

Элементы управления для запуска отладчика

В верхней части боковой панели находятся элементы управления для запуска:

Screenshot of Visual Studio Code debug sidebar controls.

  1. Запустите отладку.
  2. Выберите активную конфигурацию запуска.
  3. Измените файл launch.json. При необходимости создайте его.
  4. Откройте терминал отладки.

Просмотр и редактирование состояния переменных

При анализе причины дефекта программы просмотрите состояние переменных, чтобы искать непредвиденные изменения. Это можно сделать с помощью панели Переменные.

Переменные упорядочены по области:

  • Локальные переменные доступны в текущей области, как правило, в текущей функции.
  • Глобальные переменные доступны из любого места в программе. Они также включают системные объекты из среды выполнения JavaScript, поэтому не стоит удивляться, если их много.
  • Переменные замыкания доступны из текущего замыкания, если таковые имеются. Замыкание объединяет локальную область функции с областью внешней функции, которой она принадлежит.

Можно развернуть области и переменные, щелкнув стрелку. При развертывании объектов можно просмотреть все свойства, определенные в объекте.

Можно изменить значение переменной на лету, дважды щелкнув переменную.

Наведите указатель мыши на параметр функции или переменную непосредственно в окне редактора, чтобы просмотреть значение.

Screenshot of variable hover during debugging.

Наблюдение за переменными

Он может быть мучен для поиска состояния переменной каждый раз, когда вы хотите отслеживать его в течение времени или различных функций. Именно в этом случае удобно использовать панель Контрольное значение.

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

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

Стек вызовов

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

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

Unhandled exception. System.IndexOutOfRangeException: Index was outside the bounds of the array.
   at OrderProcessor.OrderQueue.ProcessNewOrders(String[] orderIds) in C:\Users\Repos\OrderProcessor\OrderQueue.cs:line 12
   at OrderProcessor.Program.Main(String[] args) in C:\Users\Repos\OrderProcessor\Program.cs:line 9

Группа строк at [...] под сообщением об ошибке называется трассировкой стека. В трассировке стека указаны имя и источник каждой функции, которая была вызвана до возникновения исключения. Это может быть немного сложно расшифровать, так как он также включает внутренние функции из среды выполнения .NET.

Именно в этом случае вы оцените удобство панели Стек вызовов в Visual Studio Code. Она отфильтровывает ненужные данные, чтобы по умолчанию отображались только соответствующие функции из собственного кода. Затем можно очистить этот стек вызовов, чтобы узнать, что стало причиной исключения.

Панель точек останова

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

Управление выполнением

С помощью этих элементов управления можно управлять потоком выполнения программы.

Screenshot of Visual Studio Code debugger execution controls.

Элементы управления выглядят следующим образом (слева направо):

  • Продолжить или приостановить выполнение: если выполнение приостановлено, оно продолжится до следующей точки останова. Если программа запущена, кнопка изменяется на кнопку "Пауза", которую можно использовать для приостановки выполнения.
  • Шаг над: выполняет следующую инструкцию кода в текущем контексте.
  • Шаг в: как шаг, но если следующая инструкция является вызовом функции, перейдите к первому оператору кода этой функции (так же, как step и команда).
  • Шаг. Если вы находитесь внутри функции, выполните оставшийся код этой функции и перейдите к инструкции после начального вызова функции (так же, как out и команда).
  • Перезапустите программу с самого начала.
  • Остановка. Завершение выполнения и выход из отладчика.

Использование консоли отладки

Консоль отладки можно отобразить или скрыть, нажав CTRL + SHIFT + Y в Windows или Linux. На Mac нажмите CMD + SHIFT + Y. Консоль отладки можно использовать для визуализации журналов консоли приложения. Кроме того, ее можно использовать для вычисления выражений или выполнения кода в текущем контексте выполнения, включая команды и имена переменных во встроенном отладчике .NET.

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

Screenshot of Visual Studio Code debug console.

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

Примечание.

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

Чтобы использовать выходные данные терминала во время отладки, можно использовать встроенный терминал (одно из окон Visual Studio Code) или внешний терминал. В этом учебнике используется встроенный терминал.

  1. Откройте файл .vscode/launch.json.

  2. Измените значение параметра console на integratedTerminal с:

    "console": "internalConsole",
    

    Кому:

    "console": "integratedTerminal",
    
  3. Сохранение изменений.

В следующем уроке вы узнаете, как с помощью отладчика исправить ошибку в коде Фибоначчи, который мы продемонстрировали ранее.