Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом пошаговом руководстве показано, как использовать GitHub Copilot для модернизации примера проекта Hilo, обновив его до последних средств сборки MSVC. Вы будете использовать агент модернизации, чтобы выявить и устранить проблемы, а затем использовать агент Debugger, чтобы исправить проблему во время выполнения.
О Хило
Hilo был примером проекта, разработанного Microsoft в 2012 году, чтобы продемонстрировать создание приложений, предназначенных для Windows 8 с помощью "современных" C++, XAML и среда выполнения Windows. Приложение Hilo — это приложение для просмотра фотографий, которое также включает функции заметки и общего доступа. Мы перестали обновлять пример в 2015 году и архивировали исходный код для этого примера и другие ранее отправленные примеры C++ в репозитории VCSamples GitHub.
Проблемы модернизации
Существует несколько проблем, которые агент обнаруживает и устраняет после обновления Hilo, чтобы использовать более новую версию средств сборки MSVC. Ниже приведены проблемы при сборке с помощью средств сборки Microsoft C++ (MSVC) версии 14.51.
- Шаблон класса
std::tr1::is_base_ofиспользуется в нескольких местах, но больше недоступен в стандартной библиотеке C++ компилятора MSVC, поскольку шаблон классаis_base_ofбыл включён в полный стандарт. Это ошибка блокировки. - Функция
ID2D1Factory::GetDesktopDpiустарела. - Синтаксис
[uuid(_string_)]атрибутов ATL для типов не рекомендуется. - Существует проект, который помощник по настройке не может обновить. Если у вас нет установленных средств сборки MSVC версии 120 (скорее всего), это ошибка блокировки.
- В коде обработки окна есть усечение указателя, которое приводит к исключению доступа к памяти среды выполнения.
Существует несколько других предупреждений, которые могут не быть строго связаны с обновлением, но агент может при необходимости исправить. К этим предупреждениям относятся следующие:
- Сужение предупреждений вокруг многобайтовых символьных строк и широких строк символов.
- Опечатка в имени выходного файла в пользовательском шаге сборки.
Setup
Установка средств разработки
Чтобы пройти это пошаговое руководство, необходимо следовать инструкциям по установке агента модернизации GitHub Copilot для C++.
Клонирование репозитория
Откройте Visual Studio и в окне запуска выберите Клоне репозиторий. Если окно запуска не появилось, его можно открыть с помощьюокна запуска>.
Для расположения репозитория введите: https://github.com/microsoft/VCSamples.git Выберите соответствующий путь в системе, чтобы клонировать репозиторий и нажать кнопку "Клонировать "
Запуск обновления
Загрузка Hilo.sln в Visual Studio
После клонирования репозитория загрузите файл решения в папку <repo-root>/VC2013Samples/Hilo/C++/Hilo.sln. Мы используем версию, которая поставляется с Visual Studio 2013 для этого пошагового руководства.
Обновление файлов проекта с помощью помощника по настройке
Если у вас не установлены средства v120, Visual Studio должна открыть окно мастера установки, чтобы помочь вам устранить проблему отсутствующих компонентов. Когда появится это окно, необходимо выбрать перенацелить все и нажмите кнопку "Применить". Если окно не отображается, его можно открыть в меню файла, щелкнув Project>Retarget solution.
Запустите агента модернизации Copilot
После того как помощник по настройке перенацеливает проект, вы получите сообщение информационной панели со ссылкой, чтобы запустить агент модернизации. При нажатии ссылки Run GitHub Copilot modernization for C++ запускается процесс обновления.
Если панель сведений не отображается, можно запустить агент, щелкнув решение правой кнопкой мыши в Обозреватель решений и щелкнув Modernize. Если вы идете по маршруту, вы можете начать обновление, отправив запрос I just updated MSVC Build Tools. Resolve any upgrade issues. в Copilot Chat.
Работа с агентом
Взаимодействие с агентом для получения наилучших результатов
Агент модернизации .NET использует ту же базовую модель взаимодействия, что и агент C++. В документации по .NET Работа с агентом модернизации подробно рассматриваются общие подходы. Помните, что примеры и сценарии в этой статье относятся к .NET и не применяются непосредственно к C++.
Для обновлений C++ несколько дополнительных советов помогут агенту хорошо работать:
- Чётко определяйте рамки. Вместо того чтобы просить агента обновить всё сразу, укажите ему, на каких проектах, библиотеках или средствах диагностики следует сосредоточиться. Например: "Исправление предупреждений об устаревании C4996 в
NetworkClientпроекте". - Опишите диагностику, которую, как вы ожидаете, агент исправит. Если вы знаете определенные коды предупреждений или ошибок, представленные обновлением набора инструментов, сообщите агенту заранее. Эти дополнительные инструкции помогают агенту определять приоритеты и избегать времени, затрачиваемого на не связанные проблемы.
- Убедитесь, что средства редактирования кода C/C++ включены. Убедитесь, что необходимые средства доступны в настройке перед запуском. Дополнительные сведения см. в средствах редактирования кода C/C++.
- Задайте соглашения о написании кода с помощью пользовательских инструкций. Зафиксируйте рекомендации, такие как соглашения об именовании, предпочтительные API или паттерны, которых следует избегать, в пользовательских инструкциях. Агент считывает и следует этим инструкциям на протяжении всего обновления. Полезные примеры C++ включают в себя соглашения, такие как "Предпочитать
auto, где тип очевиден" и "Следовать правилу нуля (или правилу трех/пяти, где требуется владение ресурсами").
Ожидаемое поведение
Замечание
Из-за природы агентов ИИ на основе LLM действия, которые выполняет агент, и выходные данные, которые он создает, могут отличаться от того, что показано здесь.
Предварительная оценка
Агент сначала определяет среду, в которой она работает, например систему управления версиями, и понимает ее цель. В нашем случае он обнаруживает, что вы пытаетесь обновить проект, чтобы использовать последнюю версию MSVC и инициализирует соответствующий сценарий. Он создает scenario.md файл и scenario-instructions.md файл для хранения метаданных о сценарии.
Эти файлы содержат информацию, например о том, должен ли агент работать в режиме Automatic или Guided, какова стратегия создания коммитов, а также другие сведения, влияющие на то, как агенту следует действовать дальше. Если позже вы выражаете какие-либо настройки во время работы агента, агент может добавить эти настройки в scenario-instructions.md файл.
Assessment
После инициализации агент оценивает проект, выполняя чистую пересборку проекта и проверяя результаты сборки на наличие ошибок и предупреждений. Используя эту информацию и контекст, который агент собирает из репозитория, он создаёт файл assessment.md, в котором описываются обнаруженные проблемы и указывается, считает ли он их входящими или не входящими в рамки задачи обновления.
Если агент работает в режиме управляемом, он останавливается здесь и просит вас проверить оценку. Внесите необходимые изменения, дав указание агенту или напрямую отредактировав Markdown-файл, а затем перейдите к этапу Planning. Если агент работает в автоматическом режиме, агент переходит к следующему этапу автоматически. Если вы хотите изменить что-то, необходимо остановить агент, нажав кнопку отмены, внести изменения и возобновить работу агента, введя запрос "Возобновить" в окне чата Copilot.
Оценка определяет несколько проблем, упомянутых ранее в пошаговом руководстве. Некоторые проблемы не отображаются до тех пор, пока они не будут скрыты существующими ошибками. Не беспокойтесь, они обнаруживаются позже. Если вы хотите, чтобы агент приостанавливался, чтобы получить ваше одобрение при обнаружении проблем на позднем этапе, вы можете указать эти инструкции в файле scenario-instructions.md.
Planning
После запуска этапа планирования агент выполняет более глубокий анализ проблем в области и предлагает возможные решения в созданном plan.md файле. Он также создает tasks.md файл, предоставляющий более структурированные шаги и инструкции по выполнению плана.
Как и при оценке, то, что делает агент, зависит от того, работает ли он в интерактивном или автоматическом режиме. Если агент работает в управляемом режиме, он позволяет вам указать, как именно следует исправить проблемы, или даже попросить его предложить альтернативные варианты с более подробным описанием компромиссов. Можно также указать другие ограничения, такие как соглашения по программированию или специальные шаги проверки для некоторых проблем.
Execution
После утверждения плана (или после завершения планирования в автоматическом режиме) агент переходит на этап выполнения. Здесь он начинает обрабатывать задачи, которые он имеет перед ним, адаптируясь к новой информации, обнаруженной при выполнении. При тщательном наблюдении агент обнаруживает ранее скрытые проблемы и корректирует его план соответствующим образом.
Конечным результатом этапа выполнения являются серия коммитов в репозитории, устраняющих проблемы, входящие в согласованный объём работ, и проект, который теперь успешно собирается. Однако чистая компиляция — это всего лишь один из шагов по обновлению проекта. Он также должен работать корректно.
Использование агента отладчика для устранения проблем со средой выполнения
Запуск браузера
В Обозреватель решений щелкните правой кнопкой мыши проект Browser и выберите Назначить запускаемым проектом. Затем запустите сеанс отладчика браузера Hilo, нажав клавишу F5 или выбрав команду ">" в меню файла.
Сеанс отладки должен почти сразу же прерываться при необработанных исключениях доступа к памяти.
Проверка исключения доступа на чтение памяти
Мы будем использовать агент отладчика для анализа этого исключения и реализации исправления. Нажмите кнопку Анализ с Copilot в окне информации об исключении, чтобы запустить агент отладки.
Агент отладчика использует сведения о состоянии отладки и программы, чтобы определить первопричину ошибок среды выполнения, а затем анализирует исходный код для реализации решения. В этом случае агент определяет, что недопустимый доступ к памяти вызван некорректной операцией приведения типа, в результате которой 64-битный указатель был усечён до 32 бит. Этот указатель теперь недействителен и указывает на недопустимую область памяти, что вызывает исключение. Предлагается другой способ получения корректного типа, что позволяет избежать усечения.
Применение изменений
Примите внесенные изменения, остановите сеанс отладки, нажав клавиши SHIFT +F5*, а затем запустите новый сеанс, нажав клавишу F5. Проект перекомпилируется с изменением и Visual Studio запускает обновленное приложение. Теперь появится окно браузера Hilo.
Если вы тратите время на изучение приложения, вы можете обнаружить дополнительные проблемы со средой выполнения. Мы оставим другие вопросы в качестве упражнений для читателя. Просто не забудьте использовать свои новые агентные инструменты, чтобы быстрее достичь своей цели.
Сводка
В этом пошаговом руководстве показано, как GitHub Copilot агенты могут значительно ускорить модернизацию старых проектов C++. Агент модернизации и агент отладчика могут работать вместе, чтобы упростить процесс обновления от первоначальной оценки с помощью проверки среды выполнения.
Ключевые преимущества
- Автоматическое обнаружение проблем: Агенты систематически выявляют ломающие изменения, устаревшие функции и проблемы совместимости, возникающие в результате обновлений.
- Интеллектуальные решения: вместо того, чтобы требовать исправления вручную, агенты анализируют контекст кода и предлагают соответствующие решения, адаптированные к базе кода.
- Эффективность: То, что может занять несколько дней или недель ручной работы, выполняется за считаные часы, при этом агент устраняет как ошибки сборки, так и проблемы во время выполнения.
- Управляемые или автоматические режимы: выбор между практическими рекомендациями или полностью автоматизированным выполнением на основе вашего уровня комфорта и требований к проекту.
- Обучение и адаптация: агенты обнаруживают скрытые проблемы по мере их прогресса и корректируют их подход соответствующим образом, обеспечивая комплексное покрытие.