Procédure pas à pas : mise à niveau des outils de compilation Microsoft C++ (MSVC) pour le projet exemple Hilo

Cette procédure pas à pas montre comment utiliser GitHub Copilot pour moderniser l’exemple de projet Hilo en le mettant à niveau vers les derniers outils de génération MSVC. Vous allez utiliser l’agent de modernisation pour identifier et résoudre les problèmes, puis utiliser l’agent de débogueur pour résoudre un problème d’exécution.

À propos de Hilo

Hilo a été un exemple de projet développé par Microsoft en 2012 pour illustrer la création d’applications ciblant Windows 8 à l’aide de C++, XAML et du Windows Runtime. L’application Hilo est une application de navigation photo qui inclut également des fonctionnalités d’annotation et de partage. Nous avons cessé de mettre à jour l’exemple en 2015 et archivé le code source de cet exemple et d’autres exemples C++ précédemment expédiés dans les VCSamples GitHub référentiel.

Capture d’écran de la fenêtre principale de l’application Hilo montrant le contenu du dossier Images de l’utilisateur.

Défis de modernisation

Il existe plusieurs problèmes que l’agent découvre et résout après la mise à niveau de Hilo pour utiliser une version plus récente des outils de génération MSVC. Voici les problèmes lors de la génération avec Microsoft C++ (MSVC) Build Tools version 14.51.

  • Le std::tr1::is_base_of modèle de classe est utilisé à plusieurs endroits, mais n’est plus disponible dans la bibliothèque standard C++ de MSVC, car is_base_of le modèle de classe a été promu comme faisant partie de la norme complète. Il s’agit d’une erreur bloquante.
  • La ID2D1Factory::GetDesktopDpi fonction est déconseillée.
  • La[uuid(_string_)]syntaxe des attributs ATL sur les types est déconseillée.
  • Il existe un projet que l’Assistant Installation ne parvient pas à mettre à niveau. Si vous n’avez pas installé les outils de génération MSVC v120 (probablement), il s’agit d’une erreur bloquante.
  • Il existe une troncation de pointeur dans le code de gestion des fenêtres qui provoque une exception d’accès à la mémoire du runtime.

Il existe quelques autres avertissements qui peuvent ne pas être strictement liés à la mise à niveau, mais que l’agent peut éventuellement corriger. Ces avertissements sont les suivants :

  • Avertissements étroits autour des chaînes de caractères multioctets et des chaînes de caractères larges.
  • Faute de frappe dans le nom d’un fichier de sortie dans une étape de génération personnalisée.

Paramétrage

Installer les outils de développement

Pour effectuer cette procédure pas à pas, vous devez suivre les instructions de installation pour l’agent de modernisation GitHub Copilot pour C++.

Cloner le référentiel

Ouvrez Visual Studio et, dans la fenêtre de démarrage, sélectionnez Clone un référentiel. Si la fenêtre de démarrage n’apparaît pas, vous pouvez l’ouvrir via lafenêtre de démarrage du >.

Screenshot de la fenêtre de démarrage Visual Studio avec le lien Cloner un référentiel mis en surbrillance.

Pour l’emplacement du référentiel, entrez : https://github.com/microsoft/VCSamples.git. Choisissez un chemin d’accès approprié sur votre système pour cloner le référentiel et cliquez sur le bouton Cloner

Capture d’écran de la fenêtre « Cloner un dépôt » de Visual Studio, avec les champs nécessaires renseignés et le bouton « Cloner » mis en surbrillance.

Démarrer la mise à niveau

Charger Hilo.sln dans Visual Studio

Après avoir cloné le référentiel, chargez le fichier solution à l’emplacement <repo-root>/VC2013Samples/Hilo/C++/Hilo.sln. Nous utilisons la version fournie avec Visual Studio 2013 pour cette procédure pas à pas.

Utiliser l’Assistant Configuration pour mettre à niveau les fichiers projet

Si vous n'avez pas installé les outils v120, Visual Studio devez lancer la fenêtre Assistant Configuration pour vous guider dans le traitement des composants manquants. Lorsque vous voyez cette fenêtre, vous devriez choisir Tout recibler, puis cliquer sur Appliquer. Si la fenêtre n'apparaît pas, vous pouvez l'ouvrir à partir du menu Fichier en cliquant sur Project>Changer la cible de la solution.

Capture d’écran de la fenêtre de l’assistant de configuration affichant les projets Hilo. Tous sont sélectionnés pour le reciblage et le bouton Appliquer est mis en surbrillance.

Lancer l’agent de modernisation Copilot

Une fois que l’Assistant Configuration a reciblé le projet, vous devriez recevoir un message dans la barre d’informations avec un lien permettant de démarrer l’agent de modernisation. Cliquer sur le lien Run GitHub Copilot modernization for C++ démarre le processus de mise à niveau.

Screenshot du message de barre d’informations dans Visual Studio pour lancer l’agent de modernisation.

Si la barre d'informations n'apparaît pas, vous pouvez lancer l'agent en cliquant avec le bouton droit sur la solution dans le Explorateur de solutions et en cliquant sur Modernize. Si vous effectuez cette route, vous pouvez démarrer la mise à niveau en envoyant l’invite I just updated MSVC Build Tools. Resolve any upgrade issues. à Copilot Chat.

Travailler avec l’agent

Comment interagir avec l’agent pour obtenir les meilleurs résultats

L’agent de modernisation .NET partage le même modèle d’interaction sous-jacent que l’agent C++. La documentation Utiliser l’agent de modernisation pour .NET couvre en détail les schémas généraux. N'oubliez pas que les exemples et les scénarios de cet article sont .NET spécifiques et ne s'appliquent pas directement à C++.

Pour les mises à jour de C++, quelques conseils supplémentaires peuvent aider l’agent à bien fonctionner :

  • Soyez spécifique sur l’étendue. Au lieu de demander à l’agent de mettre à niveau tout à la fois, indiquez les projets, bibliothèques ou diagnostics sur lesquels se concentrer. Par exemple : « Corriger les avertissements de dépréciation C4996 dans le projet NetworkClient. »
  • Décrivez les diagnostics que vous attendez que l’agent corrige. Si vous connaissez les codes d’avertissement ou d’erreur spécifiques introduits par la mise à niveau de l’ensemble d’outils, indiquez l’agent à l’avance. Ces instructions supplémentaires aident l’agent à hiérarchiser et à éviter que le temps soit consacré à des problèmes non liés.
  • Vérifiez que les outils d’édition de code C/C++ sont activés. Vérifiez que les outils requis sont disponibles dans votre configuration avant de commencer. Pour plus d’informations, consultez les outils de modification de code C/C++.
  • Encoder des conventions de codage à l’aide d’instructions personnalisées. Encodez des instructions telles que des conventions d’affectation de noms, des API préférées ou des modèles à éviter, dans des instructions personnalisées. L’agent lit et suit ces instructions tout au long de la mise à niveau. Les exemples C++ utiles incluent des conventions telles que « Préférer auto où le type est évident » et « Suivre la règle zéro (ou règle de trois/cinq où la propriété de la ressource l’exige). »

Comportements attendus

Note

En raison de la nature des agents IA basés sur LLM, les étapes que l’agent prend et la sortie qu’il produit peut différer de ce qui est illustré ici.

Pré-évaluation

L’agent détermine d’abord l’environnement dans lequel il s’exécute, tel que votre système de contrôle de code source et pour comprendre son objectif. Dans notre cas, il détecte que vous essayez de mettre à niveau votre projet pour utiliser la dernière version de MSVC et initialise le scénario approprié. Il crée un scenario.md fichier et un scenario-instructions.md fichier pour contenir des métadonnées sur le scénario.

Ces fichiers contiennent des informations telles que si l’agent doit fonctionner en mode automatique ou guidé , quelle est la stratégie de validation et d’autres informations qui affectent la façon dont l’agent doit continuer. Si vous exprimez des préférences ultérieurement pendant l’opération de l’agent, l’agent peut ajouter ces préférences au scenario-instructions.md fichier.

Capture d’écran du contenu d’un fichier scenario-instructions.md.

Assessment

Après l’initialisation, l’agent évalue le projet en effectuant une recompilation complète après nettoyage et en inspectant la sortie de compilation à la recherche d’erreurs et d’avertissements. À l’aide de ces informations et du contexte que l’agent collecte à partir du référentiel, il produit un assessment.md fichier qui décrit les problèmes qu’il a trouvés et s’il les considère comme étant in-scope ou hors portée pour la tâche de mise à niveau.

Capture d’écran du contenu rendu d’un fichier assessment.md.

Si l’agent fonctionne en mode guidé , l’agent s’arrête ici et demande votre examen de l’évaluation. Apportez les modifications souhaitées en invitant l’agent ou en modifiant directement le fichier Markdown, puis pour passer à la phase de planification . Si l’agent fonctionne en mode automatique , l’agent passe automatiquement à l’étape suivante. Si vous souhaitez modifier quelque chose, vous devez arrêter l’agent en appuyant sur le bouton Annuler, apporter les modifications et reprendre l’agent en tapant l’invite  » Reprendre" dans la fenêtre de conversation Copilot.

L’évaluation identifie plusieurs des problèmes mentionnés précédemment dans la procédure pas à pas. Certains problèmes ne s’affichent que plus tard, car ils sont masqués par des erreurs existantes. Ne vous inquiétez pas, ils sont découverts plus tard. Si vous souhaitez que l’agent s’interrompe pour obtenir votre approbation pour tout problème découvert en retard, vous pouvez spécifier ces instructions dans votre scenario-instructions.md fichier.

Planification

Une fois que l’agent entame la phase de planification, il effectue une analyse plus approfondie des problèmes relevant du périmètre et propose des solutions possibles dans un fichier plan.md généré. Il génère également un tasks.md fichier qui fournit des étapes et des instructions plus structurées pour l’exécution du plan.

Capture d’écran du contenu rendu d’un fichier plan.md.

Comme pour Assessment, ce que fait l’agent dépend du fait qu’il fonctionne en mode Guidé ou Automatique. Si vous exécutez en mode guidé , l’agent vous donne la possibilité de le diriger pour résoudre les problèmes de certaines façons ou même pour lui demander d’obtenir d’autres options avec des descriptions plus détaillées des compromis. Vous pouvez également spécifier d’autres contraintes telles que des conventions de codage ou des étapes de validation spéciales pour certains problèmes.

Execution

Une fois que vous avez approuvé le plan (ou une fois la planification terminée en mode automatique ), l’agent passe à l’étape d’exécution. Ici, il commence à gérer les tâches qu’il a devant elle, en s’adaptant aux nouvelles informations découvertes lors de l’exécution. Avec une observation minutieuse, vous verrez que l’agent découvre les problèmes précédemment masqués et ajuste son plan en conséquence.

Capture d’écran de l’agent au milieu de la phase d’exécution, réagissant aux problèmes nouvellement découverts.

Le résultat final de l’étape d’exécution est une série de commits dans votre référentiel qui résolvent les problèmes inclus dans le périmètre, ainsi qu’un projet qui peut désormais être compilé correctement. Toutefois, une compilation propre n’est qu’une des étapes de mise à niveau de votre projet. Il doit également s’exécuter correctement.

Utiliser l’agent de débogueur pour résoudre les problèmes d’exécution

Lancer le navigateur

Dans le Explorateur de solutions, cliquez avec le bouton droit sur le projet Browser et cliquez sur Set comme projet de démarrage. Lancez ensuite une session de débogueur du navigateur Hilo en appuyant sur F5 ou en sélectionnant Déboguer>démarrer le débogage dans le menu fichier.

La session de débogage doit presque immédiatement s’interrompre sur une exception d’accès à la mémoire non gérée.

Capture d’écran de l’exception d’accès en lecture de la mémoire lors du premier lancement du navigateur Hilo.

Examiner l’exception d’accès en lecture de la mémoire

Nous allons utiliser l’agent débogueur pour analyser cette exception et implémenter un correctif. Cliquez sur le bouton Analyze avec Copilot dans la fenêtre d’informations sur l’exception pour lancer l’agent de débogueur.

Screenshot de la fenêtre d’exception du navigateur Hilo avec le bouton Analyser avec Copilot en surbrillance.

L’agent de débogueur utilise les informations de débogage et d’état du programme pour déterminer la cause racine des erreurs d’exécution, puis analyse le code source pour implémenter une solution. Dans ce cas, l’agent détermine que l’accès mémoire non valide est dû à une opération de transtypage inappropriée qui a tronqué un pointeur 64 bits à seulement 32 bits. Ce pointeur n’est plus valide et pointe vers un emplacement de mémoire non valide, ce qui provoque l’exception. Il propose une autre méthode d’obtention du type correct et évite la troncation.

Appliquer des modifications

Acceptez les modifications qu’il suggère, arrêtez la session de débogage en appuyant sur Maj + F5*, puis démarrez une nouvelle session en appuyant sur F5. Le projet est recompilé avec la modification et Visual Studio lance l’application mise à jour. Vous devez maintenant voir apparaître la fenêtre Du navigateur Hilo.

Capture d’écran de la fenêtre principale de l’application Hilo montrant le contenu du dossier Images de l’utilisateur.

Si vous passez du temps à explorer l’application, vous pouvez découvrir d’autres problèmes d’exécution. Nous laissons tous les autres problèmes comme des exercices pour le lecteur. N’oubliez pas d’utiliser vos nouveaux outils agentiques pour atteindre votre objectif final plus rapidement.

Résumé

Cette procédure pas à pas a montré comment GitHub Copilot agents peuvent accélérer considérablement la modernisation des anciens projets C++. L’agent de modernisation et l’agent de débogueur peuvent collaborer pour simplifier le processus de mise à niveau à partir de l’évaluation initiale via la validation du runtime.

Principaux avantages

  • Détection automatisée des problèmes : les agents identifient systématiquement les changements cassants, les dépréciations et les problèmes de compatibilité qui proviennent des mises à niveau.
  • Solutions intelligentes : plutôt que de nécessiter des correctifs manuels, les agents analysent le contexte du code et proposent des solutions appropriées adaptées à votre codebase.
  • Efficacité : ce qui peut prendre des jours ou des semaines de travail manuel est terminé en heures, avec l’agent qui gère à la fois les erreurs de build et les problèmes d’exécution.
  • Modes guidés ou automatiques : choisissez entre des conseils pratiques ou une exécution entièrement automatisée en fonction de votre niveau de confort et de vos besoins en matière de projet.
  • Apprentissage et adaptation : les agents découvrent des problèmes cachés au fur et à mesure qu’ils progressent et ajustent leur approche en conséquence, garantissant ainsi une couverture complète.