Отладка приложения с помощью GitHub Copilot в Visual Studio

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

Кроме того, Copilot предоставляет более точную помощь для некоторых целевых сценариев, таких как исключения, и всех сценариев, улучшенных ИИ для отладки, описанных в . В большинстве этих сценариев найдите Ask CopilotСнимок экрана кнопки Ask Copilot. или кнопку Analyze с Copilot. В этих сценариях Copilot уже знает контекст ваших вопросов.

Для получения дополнительной информации о завершениях GitHub Copilot в Visual Studio см. раздел О завершениях GitHub Copilot в Visual Studio.

Необходимые условия

Чтобы приступить к работе, вам потребуется:

Сценарии, улучшенные ИИ

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

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

Функция или сценарий Ссылка
Агент отладчика См. раздел "Агентивное разрешение ошибок с помощью агента отладчика" в этой статье. Комплексный агентский рабочий процесс, который воспроизводит ошибки, инструментирует приложение и проверяет исправления с помощью данных реального времени динамической среды выполнения.
Анализ стека вызовов См. Анализ стека вызовов с помощью Copilot. Получите анализ одним щелчком, чтобы узнать, что делает ваш поток, включая объяснения асинхронных операций.
Исключения См. раздел Отладка исключения с помощью Copilot в этой статье. Помощь с исключениями включает помощь при ошибках обнаружения взаимоблокировок.
Переменные См. статью "Получить помощь по искусственному интеллекту".
Анализ запросов LINQ Наведите указатель мыши на запросы LINQ во время отладки в редакторе кода, чтобы увидеть возвращаемое значение. Нажмите кнопку Analyze с Copilot для помощи ИИ. Просмотр возвращаемых значений запросов LINQ.
Подсказки по работе с данными См. Получите помощь ИИ с советами по данным.
Условные точки останова и трассировочные точки См. получение предложений с помощью условных точек останова и точек трассировки в этой статье.
Быстрые действия (лампочка) См. используйте Quick Actions для получения помощи ИИ.
Визуализатор табличных данных IEnumerable См. статью "Получить помощь по искусственному интеллекту".
Автоматическое обнаружение и форматирование в визуализаторе текста См. раздел "Автоматическое обнаружение и форматирование". Copilot автоматически идентифицирует кодированные или сжатые строки и декодирует их в одном щелчке мыши.
Встроенные значения возврата См. просмотр возвращаемых значений вызовов метода.
Встроенные значения См. Просмотр встроенных значений.
Многопоточная отладка См. помощь ИИ с видом на потоки.
Модульное тестирование См. Получите помощь ИИ для отладки тестов
Проверка исключений с помощью контекста репозитория Посмотрите как получить помощь ИИ с контекстом репозитория
Устранение неполадок с точками останова См. статью "Получить помощь по искусственному интеллекту".
Функция или сценарий Ссылка
Анализ стека вызовов См. Анализ стека вызовов с помощью Copilot. Получите анализ одним щелчком, чтобы узнать, что делает ваш поток, включая объяснения асинхронных операций.
Исключения См. раздел Отладка исключения с помощью Copilot в этой статье. Помощь с исключениями включает помощь при ошибках обнаружения взаимоблокировок.
Переменные См. статью "Получить помощь по искусственному интеллекту".
Анализ запросов LINQ Наведите указатель мыши на запросы LINQ во время отладки в редакторе кода, чтобы увидеть возвращаемое значение. Нажмите кнопку Analyze с Copilot для помощи ИИ. Просмотр возвращаемых значений запросов LINQ.
Подсказки по работе с данными См. Получите помощь ИИ с советами по данным.
Условные точки останова и трассировочные точки См. получение предложений с помощью условных точек останова и точек трассировки в этой статье.
Быстрые действия (лампочка) См. используйте Quick Actions для получения помощи ИИ.
Визуализатор табличных данных IEnumerable См. статью "Получить помощь по искусственному интеллекту".
Встроенные значения возврата См. просмотр возвращаемых значений вызовов метода.
Встроенные значения См. Просмотр встроенных значений.
Многопоточная отладка См. помощь ИИ с видом на потоки.
Модульное тестирование См. Получите помощь ИИ для отладки тестов
Проверка исключений с помощью контекста репозитория Посмотрите как получить помощь ИИ с контекстом репозитория
Устранение неполадок с точками останова См. статью "Получить помощь по искусственному интеллекту".

В большинстве этих сценариев вы получаете целевую помощь с помощью Ask Copilotскриншота кнопки Ask Copilot. или кнопки Analyze с Copilot. Copilot уже знает контекст ваших вопросов. Например, он знает стек текущих вызовов, кодовую строку, о котором вы спрашиваете, и имя исключения (если произошло), поэтому вам не нужно предоставлять контекст в чате. Copilot также предоставляет предложения по использованию условных точек останова и точек трассировки.

Отладка с помощью Copilot

В следующем простом примере показано, как получить помощь СИ с помощью встроенного представления чата.

Заметка

Вы также можете получить помощь в отдельном окне чата, выбрав View > GitHub Copilot Chat. Дополнительные сведения см. в разделе Что такое расширение GitHub Copilot Chat для Visual Studio?.

Запуск сеанса отладки

  1. В Visual Studio создайте консольное приложение C#.

    В окне запуска выберите Создать проект. В поле поиска введите console выберите C# в качестве языка, а затем выберите Console App для .NET. Выберите Далее. Введите имя проекта, например ConsoleApp_Copilot, и выберите Next.

    Выберите рекомендуемую целевую платформу или .NET 10, а затем выберите Create.

    Если вы не видите шаблон проекта Console App для .NET, перейдите в раздел Tools>Get Tools and Features, который открывает установщик Visual Studio. Выберите рабочую нагрузку .NET разработки для настольных приложений и выберите Изменить.

    Visual Studio создает проект консоли, который отображается в Solution Explorer в правой области.

  2. Замените код в Program.cs следующим кодом:

    using System;
    using System.Collections.Generic;
    
    public class Example
    {
        public static void Main(string[] args)
        {
            int value = Int32.Parse(args[0]);
            List<String> names = null;
            if (value > 0)
                names = new List<String>();
    
            names.Add("Major Major Major");
        }
    }
    
  3. Щелкните правой кнопкой мыши следующую инструкцию и выберите точку останова>Вставить точку останова.

    int value = Int32.Parse(args[0]);
    
  4. Нажмите F5 или выберите Начало отладки в меню Отладка.

    Приложение приостанавливается в точке останова. В окне "Автозапуск" показано, что переменная args имеет значение string[0].

    снимок экрана окна Авто.

  1. Щелкните код правой кнопкой мыши и выберите "Чат" , чтобы открыть встроенное представление чата.
  1. Щелкните код правой кнопкой мыши и выберите Ask Copilot, чтобы открыть встроенное представление чата.

Совет

Кроме того, можно щелкнуть правой кнопкой мыши переменную в окне "Авто" или "Локальные" или в подсказке данных и выбрать Ask Copilot. Это предоставляет Copilot имя и контекст переменной, так что вам не нужно самостоятельно предоставлять контекст в чате.

  1. Введите следующий вопрос в режиме встроенного чата:

    Why does the args variable have a value of string[0]?
    

Скриншот встроенного Copilot Chat.

При нажатии Enter Copilot предоставляет ответ на основе его понимания кода. (Вы можете получить другой ответ, отличный от того, что показано здесь.)

Скриншот вопроса, на который ответил Copilot.

Если у Copilot есть предлагаемое исправление для вашего кода, он покажет его вам. В противном случае можно попросить у Copilot предложить вариант кода.

Совет

В встроенном чате используйте символ "#" и выберите из раскрывающегося списка, чтобы передать определенные сведения для Copilot при ссылке на него в своем вопросе. Например, если выбрать часть кода, а затем ввести #, можно выбрать этот выбор из раскрывающегося списка #. Вы также можете использовать символ "#" для ссылки на функции интегрированной среды разработки, которые отображаются в раскрывающемся списке, например в окне "Локальные".

  1. В этом примере прокрутите страницу до конца ответа Copilot и выберите следующий вопрос в конце встроенного окна чата: "Как справиться с случаем, когда аргументы не передаются в программу?"

    Скриншот сопутствующего вопроса Copilot.

    Copilot отображает предложенное исправление кода.

    Скриншот предложенного Copilot исправления.

    Если вы хотите применить исправление кода, нажмите клавишу TAB.

  2. Выберите Alt+Delete чтобы продолжить изучение других функций Copilot в следующем разделе.

Скриншот встроенного Copilot Chat.

При нажатии Enter Copilot предоставляет ответ на основе его понимания кода. (Вы можете получить другой ответ, отличный от того, что показано здесь.)

Скриншот с ответом Copilot на вопрос.

Если у Copilot есть предлагаемое исправление для вашего кода, он покажет его вам. В противном случае можно попросить у Copilot предложить вариант кода.

Совет

В встроенном чате используйте символ "#" и выберите из раскрывающегося списка, чтобы передать определенные сведения для Copilot при ссылке на него в своем вопросе. Например, если выбрать часть кода, а затем ввести #, можно выбрать этот выбор из раскрывающегося списка #. Вы также можете использовать символ "#" для ссылки на функции интегрированной среды разработки, которые отображаются в раскрывающемся списке, например в окне "Локальные".

  1. В этом примере прокрутите страницу до конца ответа Copilot и выберите следующий вопрос в конце встроенного окна чата: "Как справиться с случаем, когда аргументы не передаются в программу?"

    Скриншот сопутствующего вопроса Copilot.

    Copilot отображает предложенное исправление кода.

    Скриншот предложенного Copilot исправления.

    Если вы хотите применить исправление кода, выберите Принять.

  2. Выберите Cancel чтобы продолжить изучение других функций Copilot в следующем разделе.

Отладка исключения с помощью Copilot

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

Запуск сеанса отладки

  • Поставив отладчик на паузу в том же примере приложения, нажмите F11 или Отладка>Шаг в, чтобы выполнить текущую инструкцию.

    Возникает IndexOutOfRangeException, и приложение приостанавливает работу, показывая исключение.

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

Запрос помощи по искусственному интеллекту

  1. При приостановке приложения на исключении нажмите кнопку Анализировать с помощью Copilot.

    Скриншот кнопки Ask Copilot в случае исключения.

    Если он еще не открыт, откроется окно Copilot Chat и предоставляет оценку ошибки и причин ее возникновения. В этом примере Copilot определяет предлагаемое исправление кода, кнопку для копирования кода и кнопку Preview для исправления кода.

    Если у вас есть вопросы об исключении, задайте их в текстовом поле Ask Copilot.

    Снимок экрана кнопки просмотра в окне Copilot Chat.

  2. В окне чата Copilot сообщите Copilot, что нужно предотвратить ошибку.

  3. Когда Copilot предлагает исправление в окне чата, выберите Apply.

  4. Просмотрите предлагаемое исправление и выберите Tab, чтобы применить предложение по коду.

    Screenshot предварительного просмотра кода в Visual Studio.

  5. Перезапустите отладчик.

    На этот раз исключение не возникает. Исправлено!

  1. При приостановке приложения из-за исключения нажмите кнопку Ask Copilot.

    Скриншот кнопки Ask Copilot в случае исключения.

    Если он еще не открыт, откроется окно Copilot Chat и предоставляет оценку ошибки и причин ее возникновения. В этом примере Copilot определяет предлагаемое исправление кода, кнопку для копирования кода и кнопку Preview для исправления кода.

    Если у вас есть вопросы об исключении, задайте их в текстовом поле Ask Copilot.

  2. Нажмите кнопку предварительного просмотра .

    Снимок экрана кнопки просмотра в окне Copilot Chat.

    Visual Studio отображает предварительный просмотр кода с предложенным исправлением.

  3. Просмотрите предлагаемое исправление и выберите Принять, чтобы применить предложенный код.

    Screenshot предварительного просмотра кода в Visual Studio.

  4. Перезапустите отладчик.

    На этот раз исключение не возникает. Исправлено!

Устранение ошибок агентом с помощью агента отладки

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

Вы можете начать с проблемы в GitHub или Azure DevOps или описать ошибку на естественном языке. Агент отладчика сопоставляет проблему с локальным исходным кодом и направляет вас через разрешение. Вы можете взаимодействовать с агентом во время процесса отладки, чтобы предоставить больше входных данных, обсудить теорию или уточнить исправление в режиме реального времени.

Чтобы использовать агент отладчика, выполните следующие действия.

  1. Откройте окно Copilot Chat (View > GitHub Copilot Chat).
  2. Выберите отладчик в раскрывающемся списке режима в левом нижнем углу окна чата.
  3. Укажите ссылку на задачу или вопрос в GitHub или Azure DevOps, либо опишите проблему своими словами.

Скриншот, показывающий выбор агента с пользовательскими агентами в Visual Studio.

Агент отладчика выполняет следующие действия.

  • Внедрение контекста — подключает описание проблемы или ошибки к локальному исходному коду.
  • Автономный воспроизводитель — анализирует ошибку и, если шаги воспроизведения отсутствуют, создает минимальный сценарий для активации сбоя.
  • Гипотезы и инструментирование - Создает гипотезы сбоев и инструментирует ваше приложение с точками трассировки и условными точками останова для отслеживания состояния во время выполнения.
  • Проверка среды выполнения — запускает сеанс отладки и анализирует динамическую телеметрию, чтобы изолировать первопричину.
  • Целевое исправление — предлагает точное исправление в точке сбоя, а не широкий рефакторинг.
  • Окончательная проверка человека — вы повторно запустите сценарий и подтвердите исправление в динамической среде вместе с агентом.

При использовании режима агента в чате можно также переключиться на агент отладчика с помощью @debugger входных данных чата. Дополнительные сведения об агенте отладчика и других встроенных агентах см. в разделе Использовать встроенные и настраиваемые агенты с GitHub Copilot.

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

Copilot предоставляет предложения для условных точек останова и точек трассировки, которые относятся к вашему коду.

В этом примере мы показываем предложения искусственного интеллекта для условной точки останова. Для точек трассировки помощь искусственного интеллекта работает так же.

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

  2. Замените следующую строку кода:

    names.Add("Major Major Major");
    

    с этим:

    // names.Add("Major Major Major");
    foreach (var item in args)
    {
       names.Add("Name: " + item);
    }
    
  3. Слева от инструкции names.Add("Name: " + item) щелкните правой кнопкой мыши в гуттере и выберите Вставить условную точку останова.

  4. Выберите поле выражения и Copilot начинает работать над предложениями.

    Скриншот работы Copilot с предложениями по условной точке останова.

  1. Когда появятся предложения, выберите один из них, например item == "Test". Измените предложение, чтобы имя было Fred.

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

  1. При появлении предложений выберите такой вариант, как item == "John". Измените предложение, чтобы имя было Fred.

    Скриншот предложения Copilot для установки условной точки останова.

  1. Чтобы проверить условное выражение, выполните следующие действия.

    1. Щелкните правой кнопкой мыши проект ConsoleApp_Copilot в Solution Explorer и выберите Properties.

    2. Выберите Отладка>Общие>Открыть интерфейс профилей запуска отладки.

    3. В поле для аргументов командной строки введите 5 Fred Joe, в трех отдельных строках.

      снимок экрана: ввод аргументов командной строки для проекта.

    4. Перезапустите отладчик.

    Когда отладчик приостанавливается в точке останова, проверьте значение item и убедитесь, что текущее значение соответствует Fred.