Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In dieser exemplarischen Vorgehensweise wird gezeigt, wie Sie GitHub Copilot verwenden, um das Hilo-Beispielprojekt zu modernisieren, indem Sie es auf die neuesten MSVC-Buildtools aktualisieren. Sie verwenden den Modernisierungs-Agent, um Probleme zu identifizieren und zu beheben, und verwenden Sie dann den Debugger-Agent, um ein Laufzeitproblem zu beheben.
Über Hilo
Hilo war ein Beispielprojekt, das von Microsoft im Jahr 2012 entwickelt wurde, um das Erstellen von Anwendungen für Windows 8 mit modernen C++, XAML und den Windows-Runtime zu veranschaulichen. Die Hilo-Anwendung ist eine Anwendung zum Durchsuchen von Fotos, die auch Anmerkungs- und Freigabefunktionen bietet. Wir haben das Beispiel 2015 nicht mehr aktualisiert und den Quellcode für dieses Beispiel und andere zuvor ausgelieferte C++-Beispiele in der VCSamples GitHub Repository archiviert.
Modernisierungsprobleme
Es gibt mehrere Probleme, die der Agent nach dem Upgrade von Hilo zur Verwendung einer neueren MSVC Build Tools-Version erkennt und behebt. Hier sind die Probleme beim Erstellen mit Microsoft C++-Buildtools (MSVC) Version 14.51.
- Die
std::tr1::is_base_ofKlassenvorlage wird an mehreren Stellen verwendet, ist aber nicht mehr in der C++-Standardbibliothek von MSVC verfügbar, dais_base_ofdie Klassenvorlage höhergestuft wurde, um Teil des vollständigen Standards zu sein. Dies ist ein Blockierungsfehler. - Die
ID2D1Factory::GetDesktopDpiFunktion ist veraltet. - Die
[uuid(_string_)]Syntax für ATL-Attribute für Typen ist veraltet. - Es gibt ein Projekt, das vom Setup-Assistenten nicht aktualisiert werden kann. Wenn Sie die v120 MSVC Build Tools nicht installiert haben (was wahrscheinlich ist), ist dies ein Blockierungsfehler.
- Es gibt einen Zeigerabkürzung im Code für die Fensterbehandlung, der zu einer Ausnahme für den Laufzeitspeicherzugriff führt.
Es gibt einige andere Warnungen, die möglicherweise nicht streng mit dem Upgrade zusammenhängen, aber dass der Agent optional beheben kann. Zu diesen Warnungen gehören:
- Verengungswarnungen um Multibyte-Zeichenzeichenfolgen und breite Zeichenfolgen.
- Ein Tippfehler im Namen einer Ausgabedatei in einem benutzerdefinierten Buildschritt.
Konfiguration
Installieren von Entwicklungstools
Um diese Anleitung abzuschließen, müssen Sie die Installationsanweisungen für den GitHub Copilot-Modernisierungs-Agenten für C++ befolgen.
Klonen des Repositorys
Öffnen Sie Visual Studio, und wählen Sie im Startfenster Clone ein Repository aus. Wenn das Startfenster nicht angezeigt wurde, können Sie es über dasDateistartfenster> öffnen.
Geben Sie für den Repositoryspeicherort Folgendes ein: https://github.com/microsoft/VCSamples.git. Wählen Sie einen geeigneten Pfad in Ihrem System aus, um das Repository zu klonen und auf die Schaltfläche " Klonen " zu klicken.
Starten des Upgrades
Laden von Hilo.sln in Visual Studio
Nachdem Sie das Repository geklont haben, laden Sie die Lösungsdatei unter <repo-root>/VC2013Samples/Hilo/C++/Hilo.sln. Wir verwenden die Version, die mit Visual Studio 2013 ausgeliefert wurde, für diese exemplarische Vorgehensweise.
Verwenden des Setup-Assistenten zum Aktualisieren von Projektdateien
Wenn Sie die v120-Tools nicht installiert haben, sollte Visual Studio das Setup-Assistentenfenster starten, um Sie durch den Umgang mit den fehlenden Komponenten zu führen. Wenn dieses Fenster angezeigt wird, sollten Sie Alle neu zuweisen auswählen und auf Übernehmen klicken. Wenn das Fenster nicht angezeigt wird, können Sie es über das Dateimenü öffnen, indem Sie auf Project>Retarget-Lösung klicken.
Starten Sie den Copilot-Modernisierungs-Agent.
Nachdem der Setup-Assistent das Projekt neu eingerichtet hat, sollten Sie eine Infoleistennachricht mit einem Link zum Starten des Modernisierungs-Agents erhalten. Wenn Sie auf den Link Run GitHub Copilot modernization for C++ klicken, wird der Upgradevorgang gestartet.
Wenn die Infoleiste nicht angezeigt wird, können Sie den Agent starten, indem Sie mit der rechten Maustaste auf die Lösung im Projektmappen-Explorer und auf Modernize klicken. Wenn Sie diese Route ausführen, können Sie das Upgrade starten, indem Sie die Aufforderung I just updated MSVC Build Tools. Resolve any upgrade issues. an Copilot Chat senden.
Arbeiten mit dem Agent
So interagieren Sie mit dem Agent, um die besten Ergebnisse zu erzielen
Der .NET Modernisierungs-Agent verwendet das gleiche zugrunde liegende Interaktionsmodell wie der C++-Agent. Die .NET-Dokumentation Arbeiten mit dem Modernisierungs-Agent behandelt die allgemeinen Muster im Detail. Beachten Sie, dass die Beispiele und Szenarien in diesem Artikel .NET spezifisch sind und nicht direkt auf C++ angewendet werden.
Bei C++-Upgrades können einige weitere Tipps dem Agent dabei helfen, eine gute Leistung zu erzielen:
- Machen Sie genaue Angaben zum Umfang. Anstatt den Agent aufzufordern, alles gleichzeitig zu aktualisieren, teilen Sie ihm mit, auf welche Projekte, Bibliotheken oder Diagnosen sie sich konzentrieren sollen. Beispiel: "Beheben Sie die C4996-Veraltungswarnungen im Projekt
NetworkClient." - Beschreiben Sie die Diagnose, die der Agent beheben soll. Wenn Sie die spezifischen Warnungs- oder Fehlercodes kennen, die vom Toolsetupgrade eingeführt wurden, informieren Sie den Agent vorab. Diese zusätzlichen Anweisungen helfen dem Agent bei der Priorisierung und Vermeidung von Zeitaufwand für nicht verwandte Probleme.
- Stellen Sie sicher, dass C/C++-Codebearbeitungstools aktiviert sind. Überprüfen Sie, ob die erforderlichen Tools in Ihrem Setup verfügbar sind, bevor Sie beginnen. Ausführliche Informationen finden Sie unter C/C++-Codebearbeitungstools.
- Codieren Sie Codierungskonventionen mithilfe von benutzerdefinierten Anweisungen. Halten Sie Richtlinien wie Benennungskonventionen, bevorzugte APIs oder zu vermeidende Muster in custom instructions fest. Der Agent liest und folgt diesen Anweisungen während des gesamten Upgrades. Nützliche C++-Beispiele umfassen Konventionen wie "Bevorzugen
auto, wo der Typ offensichtlich ist" und "Regel von Null folgen (oder Regel von Drei/Fünf, bei denen ressourcenbesitz erforderlich ist)."
Erwartetes Verhalten
Note
Aufgrund der Art der LLM-basierten KI-Agents können die Schritte, die der Agent ausführt, und die Ausgabe, die er erzeugt, von dem hier gezeigten abweichen.
Vorabbewertung
Der Agent bestimmt zunächst, in welcher Umgebung er ausgeführt wird, z. B. in Ihrem Quellcodeverwaltungssystem, und versucht, sein Ziel zu verstehen. In unserem Fall erkennt es, dass Sie versuchen, Ihr Projekt zu aktualisieren, um das neueste MSVC zu verwenden und das entsprechende Szenario zu initialisieren. Sie erstellt eine scenario.md Datei und eine scenario-instructions.md Datei, die Metadaten zu dem Szenario enthält.
Diese Dateien enthalten Informationen dazu, ob der Agent im Modus Automatisch oder Geführt arbeiten soll, welche Commit-Strategie verwendet werden soll und weitere Informationen, die beeinflussen, wie der Agent vorgehen soll. Wenn Sie später während des Betriebs des Agenten Einstellungen angeben, kann der Agent diese Einstellungen der Datei scenario-instructions.md hinzufügen.
Assessment
Nach der Initialisierung bewertet der Agent das Projekt, indem er einen sauberen Neuaufbau des Projekts durchführt und die Build-Ausgabe auf Fehler und Warnungen überprüft. Mithilfe dieser Informationen und des Kontexts, den der Agent aus dem Repository sammelt, erzeugt er eine assessment.md-Datei, die die gefundenen Probleme beschreibt und angibt, ob sie für die Upgrade-Aufgabe innerhalb oder außerhalb des Geltungsbereichs liegen.
Wenn der Agent im geführten Modus arbeitet, stoppt der Agent hier und fordert Ihre Überprüfung der Bewertung an. Nehmen Sie alle gewünschten Änderungen vor, indem Sie den Agent auffordern oder die Markdown-Datei direkt bearbeiten, und fahren Sie dann mit der Planungsphase fort. Wenn der Agent im Modus Automatic arbeitet, fährt er automatisch mit der nächsten Phase fort. Wenn Sie etwas ändern möchten, müssen Sie den Agent beenden, indem Sie die Schaltfläche "Abbrechen" drücken, die Änderungen vornehmen und den Agent fortsetzen, indem Sie die Eingabeaufforderung "Resume" im Copilot-Chatfenster eingeben.
Die Bewertung identifiziert mehrere der oben in der exemplarischen Vorgehensweise erwähnten Probleme. Einige Probleme werden erst später angezeigt, da sie durch vorhandene Fehler ausgeblendet werden. Keine Sorge, sie werden später entdeckt. Wenn Sie möchten, dass der Agent pausiert, um bei erst spät erkannten Problemen Ihre Zustimmung einzuholen, können Sie diese Anweisungen in Ihrer scenario-instructions.md Datei angeben.
Planung
Sobald der Agent die Planungsphase startet, führt er eine tiefere Analyse der In-Scope-Probleme durch und schlägt mögliche Lösungen in einer generierten plan.md Datei vor. Außerdem wird eine tasks.md Datei generiert, die strukturiertere Schritte und Anweisungen für die Ausführung des Plans bereitstellt.
Wie bei der Bewertung hängt das Verhalten des Agenten davon ab, ob er im Geführten oder Automatischen Modus arbeitet. Wenn der Agent im Guided-Modus läuft, haben Sie die Möglichkeit, ihn anzuweisen, Probleme auf bestimmte Weise zu beheben, oder ihn sogar zu bitten, alternative Optionen mit ausführlicheren Beschreibungen der jeweiligen Abwägungen vorzuschlagen. Sie können auch andere Einschränkungen angeben, z. B. Codierungskonventionen oder spezielle Überprüfungsschritte für einige Probleme.
Ausführung
Nachdem Sie den Plan genehmigt haben (oder nachdem die Planung im automatischen Modus abgeschlossen wurde), wechselt der Agent zur Ausführungsphase. Hier beginnt es mit der Behandlung der Aufgaben, die sie vor sich hat, und passt sich bei der Ausführung an neue Informationen an. Mit sorgfältiger Beobachtung sehen Sie, dass der Agent die zuvor ausgeblendeten Probleme entdeckt und seinen Plan entsprechend anpasst.
Das Endergebnis der Ausführungsphase besteht aus einer Reihe von Commits in Ihrem Repository, die die im Projektumfang enthaltenen Probleme beheben, sowie einem Projekt, das nun erfolgreich kompiliert werden kann. Eine saubere Kompilierung ist jedoch nur einer der Schritte zum Aktualisieren Ihres Projekts. Außerdem muss es korrekt funktionieren.
Verwenden des Debugger-Agents zum Beheben von Laufzeitproblemen
Starten des Browsers
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Browser Projekt, und klicken Sie auf Set as startup project. Starten Sie dann eine Debuggersitzung des Hilo-Browsers, indem Sie F5 drücken oder im Dateimenü " Debuggen>starten" auswählen.
Die Debugging-Sitzung sollte fast sofort bei einer nicht behandelten Speicherzugriffsverletzung anhalten.
Überprüfen der Ausnahme für den Speicherlesezugriff
Wir werden den Debugger-Agent verwenden, um diese Ausnahme zu analysieren und einen Fix zu implementieren. Klicken Sie im Ausnahmeinformationsfenster auf die Schaltfläche Analyze mit Copilot, um den Debugger-Agent zu starten.
Der Debugger-Agent verwendet Debug- und Programmstatusinformationen, um die Ursache von Laufzeitfehlern zu ermitteln und analysiert dann den Quellcode, um eine Lösung zu implementieren. In diesem Fall identifiziert der Agent, dass der ungültige Speicherzugriff auf einen fehlerhaften Umwandlungsvorgang zurückzuführen ist, der einen 64-Bit-Zeiger auf nur 32 Bit abgeschnitten hat. Dieser Zeiger ist jetzt ungültig und verweist auf einen ungültigen Speicherspeicherort, wodurch die Ausnahme ausgelöst wird. Es schlägt eine andere Methode vor, den richtigen Typ zu erhalten und die Abkürzung zu vermeiden.
Änderungen anwenden
Übernehmen Sie die vorgeschlagenen Änderungen, beenden Sie die Debuggingsitzung, indem Sie UMSCHALT + F5* drücken, und starten Sie dann eine neue Sitzung, indem Sie F5 drücken. Das Projekt wird mit der Änderung neu kompiliert und Visual Studio startet die aktualisierte Anwendung. Nun sollte das Hilo-Browserfenster angezeigt werden.
Wenn Sie Zeit damit verbringen, die Anwendung zu untersuchen, können Sie weitere Laufzeitprobleme feststellen. Wir hinterlassen alle anderen Probleme als Übungen für den Leser. Denken Sie einfach daran, Ihre neuen agentischen Tools zu verwenden, um Ihr Endziel schneller zu erreichen.
Zusammenfassung
In dieser exemplarischen Vorgehensweise wurde gezeigt, wie GitHub Copilot-Agents die Modernisierung älterer C++-Projekte erheblich beschleunigen können. Der Modernisierungs-Agent und der Debugger-Agent können zusammenarbeiten, um den Upgradeprozess von der ersten Bewertung über die Laufzeitüberprüfung zu optimieren.
Hauptvorteile
- Automatische Problemerkennung: Die Agenten identifizieren systematisch inkompatible Änderungen, Veraltungen und Kompatibilitätsprobleme, die durch Upgrades entstehen.
- Intelligente Lösungen: Anstatt manuelle Korrekturen zu erfordern, analysieren die Agents den Codekontext und schlagen entsprechende Lösungen vor, die auf Ihre Codebasis zugeschnitten sind.
- Effizienz: Was Tage oder Wochen manueller Arbeit dauern könnte, ist in wenigen Stunden erledigt, wobei der Agent sowohl Build-Fehler als auch Laufzeitprobleme übernimmt.
- Geführte oder automatische Modi: Wählen Sie je nach Komfortniveau und Projektanforderungen zwischen praktischer Anleitung oder vollautomatisierter Ausführung aus.
- Lernen und Anpassung: Die Agenten entdecken versteckte Probleme, während sie vorankommen und ihren Ansatz entsprechend anpassen, um eine umfassende Abdeckung sicherzustellen.