Útmutató: Microsoft C++ (MSVC) buildeszközök frissítése a Hilo-mintaprojekthez

Ez az útmutató bemutatja, hogyan használható GitHub Copilot a Hilo-mintaprojekt modernizálására a legújabb MSVC buildeszközökre való frissítéssel. A modernizálási ügynökkel azonosíthatja és megoldhatja a problémákat, majd a Hibakereső ügynökkel kijavíthat egy futtatókörnyezeti problémát.

Tudnivalók a Hilo-ról

A Hilo a Microsoft által 2012-ben kifejlesztett mintaprojekt volt, amely a "modern" C++, XAML és a Windows-futtatókörnyezet használatával Windows 8 célzó alkalmazásokat hozott létre. A Hilo alkalmazás egy fényképböngésző alkalmazás, amely széljegyzeteket és megosztási funkciókat is tartalmaz. 2015-ben leállítottuk a minta frissítését, és archiváltuk ennek a mintának a forráskódját, valamint a VCSamples GitHub adattárban lévő többi korábban szállított C++ mintát.

Képernyőkép a fő Hilo-alkalmazásablakról, amelyen a felhasználó Képek mappájának tartalma látható.

Modernizációs kihívások

Az ügynök számos hibát észlel és megold a Hilo újabb MSVC Build Tools-verzió használatára való frissítése után. Az alábbiakban a Microsoft C++ (MSVC) buildelési eszközök 14.51-es verziójával kapcsolatos problémákat találja.

  • Az std::tr1::is_base_of osztálysablon több helyen is használható, de már nem érhető el az MSVC C++ standard kódtárában, mivel is_base_of az osztálysablon a teljes szabvány része lett. Ez egy blokkolási hiba.
  • A ID2D1Factory::GetDesktopDpi függvény elavult.
  • A[uuid(_string_)]típusok ATL-attribútumainak szintaxisa elavult.
  • Van egy projekt, amelyet a Beállítási segéd nem frissít. Ha nincs telepítve a v120 MSVC Build Tools (ami valószínűleg), akkor ez egy blokkolási hiba.
  • Az ablakkezelő kódban van egy mutató csonkolás, amely futásidejű memóriahozzáférés-kivételt okoz.

Van néhány további figyelmeztetés, amelyek nem feltétlenül kapcsolódnak a frissítéshez, de az ügynök opcionálisan ki tudja javítani. Ezek a figyelmeztetések a következők:

  • A több bájtos karaktersztringek és a széles karaktersztringek körül megjelenő figyelmeztetések szűkítése.
  • Elírás egy egyéni összeállítási lépés kimeneti fájljának nevében.

Setup

Fejlesztői eszközök telepítése

A bemutató végrehajtásához követnie kell a GitHub Copilot C++-hoz készült modernizációs ügynök telepítési útmutatóját.

Az adattár klónozása

Nyissa meg a Visual Studio és a Start ablakban válassza a Adattár hozzáadása lehetőséget. Ha a Kezdőablak nem jelent meg, a Fájl>Kezdőablak menüponton keresztül megnyithatja.

A Visual Studio kezdőablakának képernyőképe, kiemelt „Adattár klónozása” hivatkozással.

Az adattár helyéhez írja be a következőt: https://github.com/microsoft/VCSamples.git. Válassza ki a megfelelő elérési utat a rendszeren az adattár klónozásához, majd kattintson a Klónozás gombra

Képernyőkép a Visual Studio „Adattár klónozása” ablakáról, a szükséges mezők kitöltve, és a Klónozás gomb kiemelve.

A frissítés indítása

Töltse be a Hilo.sln fájlt a Visual Studio-ban

Az adattár klónozása után töltse be a megoldásfájlt a <repo-root>/VC2013Samples/Hilo/C++/Hilo.sln. Ebben az útmutatóban a Visual Studio 2013-hoz mellékelt verziót használjuk.

Projektfájlok frissítése a Beállítási segéd használatával

Ha a v120 eszközök nincsenek telepítve, a Visual Studio-nak el kell indítania a Telepítési segéd ablakát, hogy segítsen kezelni a hiányzó összetevőket. Amikor megjelenik ez az ablak, válassza a Mind újracélzása lehetőséget, majd kattintson az Alkalmaz gombra. Ha az ablak nem jelenik meg, a fájlmenüben a Project>Retarget megoldásra kattintva nyithatja meg.

Képernyőkép a Beállítási segéd ablakáról, amelyen a Hilo-projektek láthatók. Mindegyik ki van jelölve az újratargetéshez, és az Alkalmaz gomb ki van emelve.

Indítsa el a Copilot korszerűsítési ügynököt

Miután a telepítősegéd újrakezdte a projektet, egy információs sávüzenetet kell kapnia egy hivatkozással a modernizálási ügynök elindításához. A Run GitHub Copilot modernization for C++ hivatkozásra kattintva elindul a frissítési folyamat.

Képernyőkép a Visual Studio információs sávján megjelenő, a modernizálási ügynök elindítására szolgáló üzenetről.

Ha az információs sáv nem jelenik meg, az ügynök elindításához kattintson a jobb gombbal a megoldásra a Megoldáskezelő, majd a Modernize elemre. Ha ezt az útvonalat választja, elindíthatja a frissítést úgy, hogy elküldi a I just updated MSVC Build Tools. Resolve any upgrade issues. kérést Copilot Chat.

Az ügynökkel való együttműködés

Az ügynökkel való interakció a legjobb eredmények elérése érdekében

A .NET modernizálási ügynök ugyanazzal a mögöttes interakciós modellel rendelkezik, mint a C++ ügynök. A Munka a modernizálási ügynökkel .NET dokumentációja részletesen ismerteti az általános mintákat. Ne feledje, hogy a cikkben szereplő példák és forgatókönyvek .NET-specifikusak, és nem vonatkoznak közvetlenül a C++-ra.

A C++-frissítések esetén néhány további tipp segíthet az ügynöknek a jó teljesítményben:

  • Legyen konkrét a hatókörrel kapcsolatban. Ahelyett, hogy arra kérné az ügynököt, hogy frissítsen mindent egyszerre, mondja el, hogy mely projektekre, kódtárakra vagy diagnosztikákra összpontosítson. Például: "A C4996 elavulással kapcsolatos figyelmeztetések javítása a NetworkClient projektben".
  • Ismertesse az ügynök által kijavítandó diagnosztikát. Ha ismeri az eszközkészlet-frissítés által bevezetett konkrét figyelmeztetési vagy hibakódokat, mondja el előre az ügynöknek. Ezek a további utasítások segítenek az ügynöknek rangsorolni és elkerülni a nem kapcsolódó problémákra fordított időt.
  • Győződjön meg arról, hogy a C/C++ kódszerkesztő eszközök engedélyezve vannak. Mielőtt elkezdené, ellenőrizze, hogy a szükséges eszközök elérhetők-e a beállításban. További részletekért tekintse meg a C/C++ kódszerkesztő eszközöket.
  • Kódolási konvenciók kódolása egyéni utasítások használatával. Az egyéni utasításokban kódolhatja az olyan irányelveket, mint az elnevezési konvenciók, az előnyben részesített API-k vagy az elkerülendő minták. Az ügynök a frissítés során felolvassa és követi ezeket az utasításokat. Hasznos C++-példák közé tartoznak az olyan konvenciók, mint "Ahol a típus egyértelmű, részesítsd előnyben a(z) auto használatát" és "Kövesd a Rule of Zero elvét (vagy a Rule of Three/Five szabályt, ahol az erőforrások birtoklása ezt megköveteli)."

Várt viselkedések

Megjegyzés:

Az LLM-alapú AI-ügynökök jellegéből adódóan az ügynök által végrehajtott lépések és az általa előállított kimenet eltérhetnek az itt láthatótól.

Előzetes értékelés

Az ügynök először meghatározza, hogy milyen környezetben fut, például a forrásvezérlő rendszert, és hogy megértse a célját. Esetünkben azt észleli, hogy a legújabb MSVC használatára próbálja frissíteni a projektet, és inicializálja a megfelelő forgatókönyvet. Létrehoz egy scenario.md fájlt és egy scenario-instructions.md fájlt, amely metaadatokat tartalmaz a forgatókönyvről.

Ezek a fájlok olyan információkat tartalmaznak, mint például, hogy az ügynöknek automatikus vagy irányított módban kell-e működnie, mi a véglegesítések létrehozásának stratégiája, és egyéb információkat, amelyek befolyásolják az ügynök működését. Ha később az ügynök működése során bármilyen beállítást kifejez, az ügynök hozzáadhatja ezeket a beállításokat a scenario-instructions.md fájlhoz.

Képernyőkép egy scenario-instructions.md fájl tartalmáról.

Assessment

Az inicializálás után az ügynök elvégzi a projekt értékelését a projekt tiszta újraépítésével és a build kimenetének hibák és figyelmeztetések vizsgálatával. Ennek az információnak és az adattárból gyűjtött környezetnek a használatával létrehoz egy assessment.md fájlt, amely leírja a talált problémákat, és hogy a frissítési feladat hatókörén belülinek vagy hatókörön kívülinek tekinti-e őket.

Képernyőkép egy assessment.md fájl renderelt tartalmáról.

Ha az ügynök irányított módban működik, az ügynök itt leáll, és az értékelés áttekintését kéri. Végezze el a kívánt módosításokat az ügynök utasításával vagy a Markdown-fájl közvetlen szerkesztésével, majd lépjen tovább a Tervezés szakaszra. Ha az ügynök automatikus módban működik, az ügynök automatikusan folytatja a következő szakaszt. Ha módosítani szeretne valamit, a Mégse gomb megnyomásával le kell állítania az ügynököt, el kell végeznie a módosításokat, majd a Copilot csevegőablakában a "Resume" parancs beírásával újra kell indítania az ügynököt.

Az értékelés számos, az útmutatóban korábban említett problémát azonosít. Néhány probléma csak később jelenik meg, mivel a meglévő hibák elrejtik őket. Ne aggódjon, később felfedezik őket. Ha azt szeretné, hogy az ügynök megálljon, hogy kérje az Ön jóváhagyását a későn felfedezett problémák esetén, ezeket az utasításokat megadhatja a scenario-instructions.md fájlban.

Planning

Miután az ügynök megkezdte a tervezési szakaszt, részletesebb elemzést végez a hatókörön belüli problémákról, és lehetséges megoldásokat javasol egy létrehozott plan.md fájlban. Emellett létrehoz egy tasks.md fájlt, amely strukturáltabb lépéseket és utasításokat biztosít a terv végrehajtásához.

Képernyőkép egy plan.md fájl renderelt tartalmáról.

Az Értékeléshez hasonlóan az ügynök működése attól is függ, hogy irányított vagy automatikus módban működik-e. Ha irányított módban fut, az ügynök lehetőséget ad arra, hogy bizonyos módokon javítsa ki a problémákat, vagy akár kérje meg, hogy alternatív lehetőségeket kínáljon a kompromisszumok részletesebb leírásával. Más korlátozásokat is megadhat, például kódolási konvenciók vagy speciális ellenőrzési lépések bizonyos problémák esetén.

Execution

A terv jóváhagyása után (vagy ha a tervezés automatikus módban befejeződött), az ügynök a Végrehajtási fázisba kerül. Itt elkezdi kezelni az előtte lévő feladatokat, alkalmazkodva a végrehajtás során felderített új információkhoz. Gondos megfigyeléssel láthatja, hogy az ügynök felderíti a korábban rejtett problémákat, és ennek megfelelően módosítja a tervét.

Képernyőkép az ügynökről a végrehajtási szakasz közepén, az újonnan felfedezett problémákra reagálva.

A végrehajtási szakasz végeredménye az adattárban végrehajtott véglegesítések sorozata, amely megoldja a hatókörön belüli problémákat, és egy projekt, amely most már sikeresen felépíthető. A tiszta fordítás azonban csak az egyik lépés a projekt frissítéséhez. Emellett megfelelően kell futnia.

Futtatókörnyezeti problémák megoldása a Hibakereső ügynökkel

Indítsa el a böngészőt

A Megoldáskezelő ablakban kattintson jobb gombbal a Browser projektre, majd kattintson a Beállítás indítóprojektként parancsra. Ezután indítsa el a Hilo Browser hibakereső munkamenetét az F5 billentyű lenyomásával, vagy válassza a Hibakeresés>indítása parancsot a fájlmenüben.

A hibakeresési munkamenetnek szinte azonnal meg kell szakítania egy nem kezelt memóriahozzáférés-kivételt.

Képernyőkép a memória olvasási hozzáférési kivételéről a Hilo böngésző első indításakor.

Memória olvasási hozzáférési kivételének vizsgálata

A Hibakereső ügynökkel elemezzük ezt a kivételt, és implementálunk egy javítást. Kattintson a Analyze Copilot gombra a kivételinformációs ablakban a Hibakereső ügynök elindításához.

Képernyőkép a Hilo böngésző kivételablakáról, amelyen az „Elemzés a Copilottal” gomb ki van emelve.

A Hibakereső ügynök hibakeresési és programállapot-információkat használ a futtatókörnyezeti hibák kiváltó okának meghatározásához, majd elemzi a forráskódot egy megoldás implementálásához. Ebben az esetben az ügynök megállapítja, hogy az érvénytelen memóriahozzáférést egy helytelen típuskonverziós művelet okozza, amely egy 64 bites mutatót 32 bitesre csonkított. Ez a mutató érvénytelen, és érvénytelen memóriahelyre mutat, ami kivételt okoz. Egy másik módszert javasol a megfelelő típus lekérésére, és elkerüli a csonkolást.

Módosítások alkalmazása

Fogadja el a javasolt módosításokat, állítsa le a hibakeresési munkamenetet a Shift + F5* billentyűkombináció lenyomásával, majd az F5 billentyű lenyomásával indítsa el az új munkamenetet. A projekt újrafordításra kerül a módosítással, és Visual Studio elindítja a frissített alkalmazást. Ekkor megjelenik a Hilo Browser ablak.

Képernyőkép a fő Hilo-alkalmazásablakról, amelyen a felhasználó Képek mappájának tartalma látható.

Ha időt tölt az alkalmazás felfedezésével, további futtatókörnyezeti problémákat fedezhet fel. A többi problémát gyakorlatként hagyjuk az olvasó számára. Ne feledje, hogy az új ügynöki eszközökkel gyorsabban érheti el a célokat.

Összefoglalás

Ez az útmutató azt mutatta be, hogy GitHub Copilot ügynökök hogyan gyorsíthatják jelentősen a régebbi C++ projektek modernizálását. A modernizálási ügynök és a hibakereső ügynök együttműködve egyszerűsítheti a frissítési folyamatot a kezdeti értékeléstől a futásidejű ellenőrzésig.

Legfontosabb előnyök

  • Automatikus problémaészlelés: Az ügynökök szisztematikusan azonosítják a frissítésekből eredő kompatibilitási változásokat, elavulásokat és kompatibilitási problémákat.
  • Intelligens megoldások: Ahelyett, hogy manuális javításokat igényelnek, az ügynökök elemezik a kódkörnyezetet, és a kódbázisra szabott megfelelő megoldásokat javasolnak.
  • Hatékonyság: Ami napokig vagy hetekig tarthat, a manuális munka órákban fejeződik be, és az ügynök a buildelési hibákat és a futásidejű problémákat is kezeli.
  • Irányított vagy automatikus üzemmódok: Válasszon a gyakorlati útmutatás vagy a teljes mértékben automatizált végrehajtás között a kényelmi szint és a projektkövetelmények alapján.
  • Tanulás és alkalmazkodás: Az ügynökök felderítik a rejtett problémákat, miközben haladnak, és ennek megfelelően módosítják megközelítésüket, biztosítva az átfogó lefedettséget.