Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento návod ukazuje, jak pomocí GitHub Copilot modernizovat ukázkový projekt Hilo upgradem na nejnovější nástroje MSVC Build Tools. Pomocí agenta modernizace identifikujete a vyřešíte problémy a pak pomocí agenta ladicího programu opravíte problém za běhu.
O společnosti Hilo
Hilo byl ukázkový projekt vyvinutý Microsoft v roce 2012, který demonstroval vytváření aplikací, které cílí na Windows 8 pomocí "moderního" jazyka C++, XAML a prostředí Windows Runtime. Aplikace Hilo je aplikace pro procházení fotek, která obsahuje také funkce poznámek a sdílení. V roce 2015 jsme zastavili aktualizaci ukázky a archivovali zdrojový kód pro tuto ukázku a další ukázky C++ v úložišti VCSamples GitHub.
Výzvy modernizace
Existuje několik problémů, které agent zjistí a vyřeší po upgradu Hilo na novější verzi nástroje MSVC Build Tools. Tady jsou problémy při sestavování pomocí nástrojů sestavení Microsoft C++ (MSVC) verze 14.51.
- Šablona
std::tr1::is_base_oftřídy se používá na několika místech, ale už není k dispozici ve standardní knihovně jazyka C++ MSVC, protožeis_base_ofšablona třídy byla povýšena na součást úplného standardu. Jedná se o blokující chybu. - Funkce
ID2D1Factory::GetDesktopDpije zastaralá. -
[uuid(_string_)]Syntaxe atributů ATL u typů je zastaralá. - Existuje projekt, který pomocník s nastavením neupgraduje. Pokud nemáte nainstalované nástroje sestavení MSVC v120 (což je pravděpodobné), jedná se o blokující chybu.
- V kódu pro obsluhu oken dochází k oříznutí ukazatele, které způsobuje výjimku při přístupu do paměti za běhu.
Existuje několik dalších upozornění, která nemusí být přísně spojena s upgradem, ale že agent může volitelně opravit. Mezi tato upozornění patří:
- Upozornění na zúžení u vícebajtových řetězců a širokých znakových řetězců.
- Překlep v názvu výstupního souboru ve vlastním kroku sestavení.
Instalace
Instalace vývojových nástrojů
Abyste mohli tento návod dokončit, musíte postupovat podle pokynů pro instalace pro agenta modernizace GitHub Copilot pro C++.
Klonování úložiště
Otevřete Visual Studio a v okně Start vyberte Vložit úložiště. Pokud se okno Start nezobrazilo, můžete ho otevřít přes nabídku Soubor>Okno Start.
Jako umístění úložiště zadejte: https://github.com/microsoft/VCSamples.git. Zvolte v systému odpovídající cestu, do které chcete úložiště naklonovat, a klikněte na tlačítko Klonovat .
Zahájit upgrade
Načtení Hilo.sln v Visual Studio
Po naklonování úložiště otevřete soubor řešení v umístění <repo-root>/VC2013Samples/Hilo/C++/Hilo.sln. Pro účely tohoto názorného postupu používáme verzi dodávaná s Visual Studio 2013.
Použití Pomocníka s nastavením k upgradu souborů projektu
Pokud nemáte nainstalované nástroje v120, Visual Studio by mělo otevřít okno Průvodce nastavením, které vás provede postupem řešení chybějících součástí. Až se zobrazí toto okno, měli byste zvolit možnost Změnit cílení na vše a kliknout na Použít. Pokud se okno nezobrazí, můžete ho otevřít z nabídky Soubor kliknutím na Project>Změnit cílení řešení.
Spusťte agenta Copilot pro modernizaci
Jakmile pomocník s nastavením projekt znovu nasměruje, měli byste obdržet zprávu informačního panelu s odkazem pro spuštění agenta modernizace. Kliknutím na odkaz Run GitHub Copilot modernization for C++ spustíte proces upgradu.
Pokud se informační panel nezobrazí, můžete agenta spustit tak, že kliknete pravým tlačítkem na řešení v Průzkumník řešení a kliknete na Modernize. Pokud přejdete na tuto trasu, můžete zahájit upgrade odesláním výzvy I just updated MSVC Build Tools. Resolve any upgrade issues. do Copilot Chat.
Práce s agentem
Interakce s agentem za účelem získání nejlepších výsledků
.NET agenta modernizace sdílí stejný základní model interakce jako agent C++. Dokumentace k .NET Work with the modernization agent podrobně popisuje obecné postupy. Mějte na paměti, že příklady a scénáře v tomto článku jsou .NET specifické a nevztahují se přímo na jazyk C++.
Při aktualizacích C++ může agentovi pomoci několik dalších tipů, aby fungoval dobře:
- Buďte specifická ohledně rozsahu. Místo toho, aby agent požádal o upgrade všeho najednou, řekněte mu, na které projekty, knihovny nebo diagnostiku se mají zaměřit. Například: "Opravte varování C4996 o zastarání v projektu
NetworkClient." - Popište diagnostiku, kterou očekáváte, že agent opraví. Pokud znáte konkrétní upozornění nebo kódy chyb zavedené upgradem sady nástrojů, informujte agenta předem. Tyto další pokyny pomáhají agentům určit prioritu a vyhnout se času strávenému na nesouvisejících problémech.
- Ujistěte se, že jsou povolené nástroje pro úpravy kódu C/C++. Než začnete, ověřte, že jsou v nastavení k dispozici požadované nástroje. Podrobnosti najdete v nástrojích pro úpravy kódu C/C++.
- Kódujte konvence kódování pomocí vlastních pokynů. Zakotvěte pokyny, jako jsou konvence pojmenování, preferovaná rozhraní API nebo vzory, kterým je třeba se vyhnout, do vlastních pokynů. Agent čte tyto pokyny a postupuje podle těchto pokynů v průběhu upgradu. Mezi užitečné příklady v C++ patří konvence jako "Upřednostňujte
auto, když je typ zřejmý" a "Řiďte se pravidlem nuly (nebo pravidlem tří/pěti, pokud to vyžaduje vlastnictví prostředků)."
Očekávané chování
Note
Vzhledem k povaze agentů AI založených na LLM se kroky, které agent vezme, a výstup, který generuje, se můžou lišit od toho, co je zde uvedeno.
Předběžné posouzení
Agent nejprve určuje prostředí, ve kterém běží, například v systému správy zdrojového kódu, a aby porozuměl jeho cíli. V našem případě zjistí, že se pokoušíte upgradovat projekt tak, aby používal nejnovější MSVC a inicializuje příslušný scénář. Vytvoří soubor scenario.md a soubor scenario-instructions.md, které budou obsahovat metadata o daném scénáři.
Tyto soubory obsahují informace, jako je to, jestli má agent fungovat v režimu Automatické nebo Řízené , jaká je strategie provádění potvrzení, a další informace, které ovlivňují způsob, jakým má agent pokračovat. Pokud později během provozu agenta vyjadřujete jakékoli předvolby, může agent tyto předvolby přidat do scenario-instructions.md souboru.
Assessment
Po inicializaci agent vyhodnotí projekt tak, že provede úplné nové sestavení projektu a zkontroluje výstup sestavení, zda neobsahuje chyby a upozornění. Na základě těchto informací a kontextu, který agent shromažďuje z repozitáře, agent vytvoří soubor assessment.md, který popisuje nalezené problémy a uvádí, zda je považuje za spadající do rozsahu úlohy upgradu, nebo mimo něj.
Pokud agent pracuje v režimu s asistencí , agent se zastaví a požádá o kontrolu posouzení. Proveďte požadované změny tak, že zobrazíte výzvu agenta nebo přímo upravíte soubor Markdownu a budete pokračovat ve fázi Plánování . Pokud agent pracuje v automatickém režimu, agent pokračuje automaticky k další fázi. Pokud chcete něco změnit, musíte agenta zastavit stisknutím tlačítka zrušit, provést změny a pokračovat v agentu zadáním výzvy "Resume" v okně Copilot chatu.
Posouzení identifikuje několik problémů uvedených výše v návodu. Některé problémy se nezobrazují až později, protože jsou skryté existujícími chybami. Nedělejte si starosti, později je zjistíte. Pokud chcete, aby agent pozastavil svou činnost a vyžádal si vaše schválení u jakýchkoli pozdě zjištěných problémů, můžete tyto pokyny uvést v souboru scenario-instructions.md.
Planning
Jakmile agent spustí fázi plánování, provede hlubší analýzu problémů v oboru a navrhne možná řešení ve vygenerovaném plan.md souboru. Vygeneruje tasks.md také soubor, který poskytuje strukturovanější kroky a pokyny pro provedení plánu.
Stejně jako u hodnocení to, co agent dělá, závisí na tom, zda pracuje v řízeném nebo automatickém režimu. Pokud je agent spuštěný v režimu s asistencí , nabízí možnost ho nasměrovat na řešení problémů určitými způsoby nebo dokonce požádat, aby přišel s alternativními možnostmi s podrobnějšími popisy kompromisů. Můžete také určit další omezení, jako jsou konvence kódování nebo speciální ověřovací kroky pro některé problémy.
Provádění
Po schválení plánu (nebo po dokončení plánování v automatickém režimu) se agent přesune do fáze provádění. V této části začne zpracovávat úlohy, které má před sebou, a přizpůsobuje se tak novým informacím, které se při provádění objeví. Při pečlivém pozorování uvidíte, že agent zjistí dříve skryté problémy a odpovídajícím způsobem upraví svůj plán.
Konečným výsledkem fáze realizace je série commitů ve vašem repozitáři, které řeší problémy spadající do vymezeného rozsahu, a projekt, který nyní lze úspěšně sestavit. Čistá kompilace je ale jen jedním z kroků k upgradu projektu. Musí také správně fungovat.
Použijte agenta Debugger k řešení problémů za běhu
Spuštění prohlížeče
V Průzkumník řešení klikněte pravým tlačítkem na projekt Browser a klikněte na Nastavovat jako spouštěný projekt. Potom spusťte ladicí relaci prohlížeče Hilo stisknutím F5 nebo výběrem možnosti Ladit>Spustit ladění z nabídky.
Ladicí relace by se měla téměř okamžitě přerušit u neošetřené výjimky přístupu k paměti.
Prozkoumání výjimky přístupu ke čtení paměti
K analýze této výjimky a implementaci opravy použijeme agenta ladicího programu. Kliknutím na tlačítko Analyzovat pomocí Copilotu v okně s informacemi o výjimce spusťte agenta ladění.
Agent ladicího programu používá informace o stavu ladění a programu k určení původní příčiny chyb modulu runtime a pak analyzuje zdrojový kód pro implementaci řešení. V tomto případě agent zjistí, že neplatný přístup k paměti je způsoben nesprávnou operací přetypování, která zkrátila 64bitový ukazatel pouze na 32 bitů. Tento ukazatel je nyní neplatný a ukazuje na neplatnou adresu v paměti, což vyvolá výjimku. Navrhuje jiný způsob, jak získat správný typ, a zabrání zkrácení.
Použít změny
Přijměte navržené změny, ukončete ladicí relaci stisknutím kombinace kláves Shift + F5* a poté spusťte novou relaci stisknutím klávesy F5. Projekt je znovu zkompilován se změnou a Visual Studio spustí aktualizovanou aplikaci. Teď by se mělo zobrazit okno Hilo Browser.
Pokud trávíte čas zkoumáním aplikace, můžete zjistit další problémy s modulem runtime. Všechny ostatní problémy ponecháme jako cvičení pro čtenáře. Nezapomeňte použít nové agentské nástroje, abyste se dostali k cíli rychleji.
Shrnutí
Tento názorný postup ukazuje, jak mohou agenti GitHub Copilot výrazně urychlit modernizaci starších projektů C++. Agent pro modernizaci a ladicí agent mohou spolupracovat a zjednodušit proces přechodu na novější verzi od počátečního posouzení až po ověření za běhu.
Klíčové výhody
- Automatická detekce problémů: Agenti systematicky identifikují nekompatibilní změny, zastarání a problémy s kompatibilitou, ke kterým dochází při aktualizacích.
- Inteligentní řešení: Místo ručních oprav agenti analyzují kontext kódu a navrhují vhodná řešení přizpůsobená vašemu základu kódu.
- Efektivita: To, co by jinak vyžadovalo dny nebo týdny manuální práce, je hotové během několika hodin, přičemž agent řeší jak chyby při sestavení, tak i problémy při běhu.
- Řízené nebo automatické režimy: Můžete si vybrat mezi praktických pokyny nebo plně automatizovaným spouštěním na základě vašich požadavků na komfort a projekt.
- Učení a přizpůsobení: Agenti při pokroku objevují skryté problémy a odpovídajícím způsobem upravují svůj přístup a zajišťují tak komplexní pokrytí.