Schritt-für-Schritt-Anleitung: Aktualisieren der Microsoft C++-Buildtools (MSVC) für das Hilo-Beispielprojekt

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.

Screenshot des Hilo-Hauptanwendungsfensters mit dem Inhalt des Ordners

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_of Klassenvorlage wird an mehreren Stellen verwendet, ist aber nicht mehr in der C++-Standardbibliothek von MSVC verfügbar, da is_base_of die Klassenvorlage höhergestuft wurde, um Teil des vollständigen Standards zu sein. Dies ist ein Blockierungsfehler.
  • Die ID2D1Factory::GetDesktopDpi Funktion 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.

Screenshot des Visual Studio Startfensters mit hervorgehobenem Link

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.

Screenshot des Fensters „Repository klonen“ in Visual Studio mit ausgefüllten erforderlichen Feldern und hervorgehobener Schaltfläche „Klonen“.

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.

Screenshot des Fensters des Setup-Assistenten mit den Hilo-Projekten. Alle sind zur Neuausrichtung ausgewählt, und die Schaltfläche „Anwenden“ ist hervorgehoben.

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.

Screenshot der Infoleistennachricht in Visual Studio zum Starten des Modernisierungs-Agents.

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.

Screenshot des Inhalts einer scenario-instructions.md Datei.

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.

Screenshot des gerenderten Inhalts einer assessment.md Datei.

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.

Screenshot des gerenderten Inhalts einer plan.md Datei.

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.

Screenshot des Agenten mitten in der Ausführungsphase, wie er auf neu entdeckte Probleme reagiert.

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.

Screenshot der Ausnahme für den Speicherlesezugriff beim ersten Starten des Hilo-Browsers.

Ü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.

Bildschirmfoto des Fensters für Ausnahmen im Hilo-Browser mit hervorgehobener Schaltfläche „Mit Copilot analysieren“.

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.

Screenshot des Hilo-Hauptanwendungsfensters mit dem Inhalt des Ordners

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.