Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit scenario ziet u hoe u GitHub Copilot kunt gebruiken om het Hilo-voorbeeldproject te moderniseren door het te upgraden naar de nieuwste MSVC-buildhulpprogramma's. U gebruikt de moderniseringsagent om problemen te identificeren en op te lossen. Vervolgens gebruikt u de Agent voor foutopsporing om een runtimeprobleem op te lossen.
Over Hilo
Hilo is een voorbeeldproject dat is ontwikkeld door Microsoft in 2012 om te laten zien hoe u toepassingen maakt die gericht zijn op Windows 8 met behulp van "modern" C++, XAML en de Windows Runtime. De Hilo-toepassing is een toepassing voor het bladeren door foto's die ook annotatie- en deelfuncties bevat. We zijn in 2015 gestopt met het bijwerken van het voorbeeld en hebben de broncode voor dit voorbeeld en andere eerder uitgebrachte C++-voorbeelden gearchiveerd in de VCSamples GitHub repository.
Moderniseringsuitdagingen
Er zijn verschillende problemen die de agent detecteert en oplost na het upgraden van Hilo om een nieuwere versie van MSVC Build Tools te gebruiken. Hier volgen de problemen bij het bouwen met Microsoft C++ (MSVC) Build Tools versie 14.51.
- De
std::tr1::is_base_ofklassesjabloon wordt op verschillende plaatsen gebruikt, maar is niet meer beschikbaar in de C++-standaardbibliotheek van MSVC, omdatis_base_ofde klassesjabloon is gepromoveerd tot onderdeel van de volledige standaard. Dit is een blokkeringsfout. - De
ID2D1Factory::GetDesktopDpifunctie is afgeschaft. - De
[uuid(_string_)]syntaxis voor ATL-kenmerken voor typen is afgeschaft. - Er is een project dat de configuratieassistent niet kan upgraden. Als u de v120 MSVC-buildhulpprogramma's (waarschijnlijk) niet hebt geïnstalleerd, is dit een blokkeringsfout.
- Er is sprake van afkapping van een pointer in code voor vensterafhandeling, wat tijdens runtime een geheugentoegangsuitzondering veroorzaakt.
Er zijn enkele andere waarschuwingen die mogelijk niet strikt gerelateerd zijn aan de upgrade, maar die de agent optioneel kan oplossen. Deze waarschuwingen zijn onder andere:
- Waarschuwingen voor tekenreeksen met meerdere bytes en tekenreeksen met brede tekens aanscherpen.
- Een typefout in de naam van een uitvoerbestand in een aangepaste buildstap.
Configuratie
Ontwikkelhulpprogramma's installeren
Om deze handleiding te voltooien, moet u de installatie-instructies voor de GitHub Copilot-moderniseringsagent voor C++ volgen.
De opslagplaats klonen
Open Visual Studio en selecteer in het startvenster Clone een opslagplaats. Als het startvenster niet is verschenen, kunt u het openen via Bestand>Startvenster.
Voer voor de locatie van de opslagplaats het volgende in: https://github.com/microsoft/VCSamples.git. Kies een geschikt pad op uw systeem om de opslagplaats te klonen en klik op de knop Klonen
De upgrade starten
Hilo.sln laden in Visual Studio
Nadat u de opslagplaats hebt gekloond, laadt u het oplossingsbestand op de <repo-root>/VC2013Samples/Hilo/C++/Hilo.sln. We gebruiken voor deze stapsgewijze handleiding de versie die bij Visual Studio 2013 is meegeleverd.
De Configuratieassistent gebruiken om projectbestanden te upgraden
Als u de v120-hulpprogramma's niet hebt geïnstalleerd, moet Visual Studio het venster Configuratieassistent starten om u te begeleiden bij het omgaan met de ontbrekende onderdelen. Wanneer u dit venster ziet, moet u ervoor kiezen om alles opnieuw te bepalen en op Toepassen te klikken. Als het venster niet wordt weergegeven, kunt u het openen vanuit het bestandsmenu door te klikken op Project>Retarget-oplossing.
De Copilot moderniseringsagent starten
Nadat de configuratieassistent het project opnieuw heeft ingesteld, ontvangt u een infobalkbericht met een koppeling om de moderniseringsagent te starten. Als u op de koppeling Run GitHub Copilot modernization for C++ klikt, wordt het upgradeproces gestart.
Als de infobalk niet wordt weergegeven, kunt u de agent starten door met de rechtermuisknop op de oplossing te klikken in de Solution Explorer en op Modernize te klikken. Als u die route gebruikt, kunt u de upgrade starten door de prompt I just updated MSVC Build Tools. Resolve any upgrade issues. te verzenden naar Copilot Chat.
Werken met de agent
Interactie met de agent om de beste resultaten te krijgen
De .NET moderniseringsagent deelt hetzelfde onderliggende interactiemodel als de C++-agent. De documentatie Werk met de moderniseringsagent voor .NET bevat gedetailleerde informatie over de algemene patronen. Houd er rekening mee dat de voorbeelden en scenario's in dat artikel .NET-specifiek zijn en niet rechtstreeks van toepassing zijn op C++.
Voor C++-upgrades kunnen nog enkele tips worden gebruikt om de agent goed te laten presteren:
- Wees specifiek over het bereik. In plaats van de agent te vragen om alles in één keer te upgraden, vertelt u aan welke projecten, bibliotheken of diagnostische gegevens u zich wilt richten. Bijvoorbeeld: "De C4996-verouderingswaarschuwingen in het
NetworkClient-project oplossen." - Beschrijf de diagnostische informatie die u verwacht dat de agent oplost. Als u de specifieke waarschuwings- of foutcodes kent die zijn geïntroduceerd door de upgrade van de toolset, laat u de agent vooraf weten. Deze aanvullende instructies helpen de agent prioriteit te geven en te voorkomen dat er tijd wordt besteed aan niet-gerelateerde problemen.
- Zorg ervoor dat hulpprogramma's voor het bewerken van C/C++-code zijn ingeschakeld. Controleer of de vereiste hulpprogramma's beschikbaar zijn in uw installatie voordat u begint. Zie C/C++ hulpprogramma's voor het bewerken van code voor meer informatie.
- Leg coderingsconventies vast met aangepaste instructies. Codeer richtlijnen zoals naamconventies, voorkeurs-API's of patronen om te voorkomen, in aangepaste instructies. De agent leest en volgt deze instructies tijdens de upgrade. Handige C++-voorbeelden zijn conventies zoals 'Voorkeur
autowaar het type duidelijk is' en 'Volg de regel van nul (of regel van drie/vijf waar het eigendom van resources vereist is).'
Verwacht gedrag
Note
Vanwege de aard van OP LLM gebaseerde AI-agents kunnen de stappen die de agent uitvoert en de uitvoer die deze produceert verschillen van wat hier wordt weergegeven.
Evaluatie vooraf
De agent bepaalt eerst de omgeving waarin deze wordt uitgevoerd, zoals uw broncodebeheersysteem, en om het doel ervan te begrijpen. In ons geval wordt gedetecteerd dat u uw project wilt upgraden om de meest recente MSVC te gebruiken en het juiste scenario initialiseert. Er wordt een scenario.md bestand en een scenario-instructions.md bestand gemaakt dat metagegevens over het scenario bevat.
Deze bestanden bevatten informatie, zoals of de agent in de modus Automatisch of Begeleid moet werken, wat de strategie voor het maken van commits is en andere informatie die van invloed is op de manier waarop de agent te werk moet gaan. Als u later tijdens de werking van de agent voorkeuren uitdrukt, kan de agent deze voorkeuren toevoegen aan het scenario-instructions.md bestand.
Assessment
Na de initialisatie voert de agent een evaluatie van het project uit door een schone herbouw van het project uit te voeren en de build-uitvoer te inspecteren op fouten en waarschuwingen. Met behulp van deze informatie en context die de agent verzamelt uit de opslagplaats, produceert het een assessment.md bestand waarin de gevonden problemen worden beschreven en of ze al dan niet binnen het bereik of buiten het bereik van de upgradetaak vallen.
Als de agent in de begeleide modus werkt, stopt de agent hier en vraagt de beoordeling van de evaluatie aan. Breng eventueel gewenste wijzigingen aan door de agent te vragen of door het Markdown-bestand rechtstreeks te bewerken en vervolgens door te gaan naar de planningsfase . Als de agent in de automatische modus werkt, gaat de agent automatisch door naar de volgende fase. Als u iets wilt wijzigen, moet u de agent stoppen door op de knop Annuleren te drukken, de wijzigingen aan te brengen en de agent te hervatten door de prompt "Hervatten" in het Copilot chatvenster te typen.
De evaluatie signaleert verschillende problemen die eerder in de stapsgewijze uitleg zijn genoemd. Sommige problemen worden pas later weergegeven omdat ze worden verborgen door bestaande fouten. Maak je geen zorgen, ze worden later ontdekt. Als u wilt dat de agent pauzeert om uw goedkeuring te krijgen voor eventuele late gedetecteerde problemen, kunt u deze instructies in uw scenario-instructions.md bestand opgeven.
Planning
Zodra de agent de planningsfase start, wordt een diepere analyse uitgevoerd van de problemen binnen het bereik en worden mogelijke oplossingen voorgesteld in een gegenereerd plan.md bestand. Er wordt ook een tasks.md bestand gegenereerd dat meer gestructureerde stappen en instructies biedt voor het uitvoeren van het plan.
Net als bij Evaluatie is wat de agent doet, afhankelijk van of deze werkt in de begeleide of automatische modus. Als de agent in de modus Guided draait, biedt deze u de mogelijkheid om aan te geven hoe problemen moeten worden opgelost, of zelfs om te vragen alternatieve opties voor te stellen met gedetailleerdere beschrijvingen van de afwegingen. U kunt ook andere beperkingen opgeven, zoals coderingsconventies of speciale validatiestappen voor sommige problemen.
Execution
Nadat u het plan goedkeurt (of nadat de planning is voltooid in de automatische modus), wordt de agent verplaatst naar de uitvoeringsfase. Hier wordt begonnen met het afhandelen van de taken die er voor zijn, waarbij deze zich aanpast aan nieuwe informatie die is gedetecteerd tijdens het uitvoeren. Met zorgvuldige observatie ziet u dat de agent de eerder verborgen problemen detecteert en het plan dienovereenkomstig aanpast.
Het eindresultaat van de uitvoeringsfase is een reeks commits naar uw repository die de problemen binnen de scope oplossen, en een project dat nu succesvol kan worden gebouwd. Een schone compilatie is echter slechts een van de stappen voor het upgraden van uw project. Het moet ook correct werken.
De Agent voor foutopsporing gebruiken om runtimeproblemen op te lossen
De browser starten
Klik in de Solution Explorer met de rechtermuisknop op het project Browser en klik op Set as startup project. Start vervolgens een foutopsporingsprogrammasessie van de Hilo-browser door op F5 te drukken of Foutopsporing>starten te selecteren in het bestandsmenu.
De foutopsporingssessie moet bijna onmiddellijk worden onderbroken op een uitzondering voor niet-verwerkte geheugentoegang.
Onderzoek uitzondering bij leestoegang tot het geheugen
We gaan de Foutopsporingsprogramma-agent gebruiken om deze uitzondering te analyseren en een oplossing te implementeren. Klik op de knop Analyze met Copilot in het venster met uitzonderingsgegevens om de foutopsporingsagent te starten.
De foutopsporingsprogrammaagent maakt gebruik van foutopsporings- en programmastatusgegevens om de hoofdoorzaak van runtimefouten te bepalen en analyseert vervolgens de broncode om een oplossing te implementeren. In dit geval geeft de agent aan dat de ongeldige geheugentoegang wordt veroorzaakt door een onjuiste cast-bewerking die een 64-bits aanwijzer heeft afgekapt tot slechts 32 bits. Deze aanwijzer is nu ongeldig en verwijst naar een ongeldige geheugenlocatie, waardoor de uitzondering wordt veroorzaakt. Het stelt een andere methode voor om het juiste type op te halen en truncatie te voorkomen.
Wijzigingen toepassen
Accepteer de wijzigingen die worden voorgesteld, stop de foutopsporingssessie door op Shift + F5* te drukken en start vervolgens een nieuwe sessie door op F5 te drukken. Het project wordt opnieuw gecompileerd met de wijziging en Visual Studio de bijgewerkte toepassing start. Het venster Hilo Browser wordt nu weergegeven.
Als u tijd besteedt aan het verkennen van de toepassing, kunt u meer runtimeproblemen detecteren. We laten eventuele andere problemen achter als oefeningen voor de lezer. Vergeet niet om uw nieuwe agentische hulpprogramma's te gebruiken om sneller bij uw einddoel te komen.
Overzicht
In dit scenario werd gedemonstreerd hoe GitHub Copilot agents de modernisering van oudere C++-projecten aanzienlijk kunnen versnellen. De moderniseringsagent en de debuggeragent kunnen samenwerken om het upgradeproces te stroomlijnen, van de initiële beoordeling tot en met runtimevalidatie.
Belangrijkste voordelen
- Geautomatiseerde probleemdetectie: De agents identificeren systematisch belangrijke wijzigingen, afschaffingen en compatibiliteitsproblemen die ontstaan door upgrades.
- Intelligente oplossingen: in plaats van handmatige oplossingen te vereisen, analyseren de agents codecontext en stellen ze geschikte oplossingen voor die zijn afgestemd op uw codebasis.
- Efficiëntie: Wat kan dagen of weken handmatig werk duren, wordt in uren voltooid, waarbij de agent zowel buildfouten als runtimeproblemen afhandelt.
- Begeleide of automatische modi: kies tussen praktische begeleiding of volledig geautomatiseerde uitvoering op basis van uw comfortniveau en projectvereisten.
- Leren en aanpassen: de agents ontdekken verborgen problemen tijdens de voortgang en passen hun aanpak dienovereenkomstig aan, waardoor een uitgebreide dekking wordt gegarandeerd.