Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questa procedura dettagliata illustra come usare GitHub Copilot per modernizzare il progetto di esempio Hilo aggiornandolo alla versione più recente di MSVC Build Tools. Si userà l'agente di modernizzazione per identificare e risolvere i problemi, quindi usare l'agente debugger per risolvere un problema di runtime.
Informazioni su Hilo
Hilo è stato un progetto di esempio sviluppato da Microsoft nel 2012 per illustrare la creazione di applicazioni destinate Windows 8 usando C++, XAML e il Windows Runtime "modern". L'applicazione Hilo è un'applicazione di esplorazione delle foto che include anche funzionalità di annotazione e condivisione. L'aggiornamento dell'esempio è stato interrotto nel 2015 ed è stato archiviato il codice sorgente per questo esempio e altri esempi C++ forniti in precedenza nel repository VCSamples GitHub repository.
Sfide di modernizzazione
Esistono diversi problemi che l'agente individua e risolve dopo l'aggiornamento di Hilo per usare una versione più recente di MSVC Build Tools. Ecco i problemi relativi alla compilazione con Microsoft C++ (MSVC) Build Tools versione 14.51.
- Il
std::tr1::is_base_ofmodello di classe viene usato in diverse posizioni, ma non è più disponibile nella libreria standard C++ di MSVC perchéis_base_ofil modello di classe è stato promosso come parte dello standard completo. Si tratta di un errore di blocco. - La
ID2D1Factory::GetDesktopDpifunzione è deprecata. - La
[uuid(_string_)]sintassi per gli attributi ATL applicati ai tipi è deprecata. - C'è un progetto che l'Assistente di configurazione non riesce ad aggiornare. Se non sono installati gli strumenti di compilazione MSVC v120 (probabilmente), si tratta di un errore di blocco.
- È presente un troncamento del puntatore nel codice di gestione delle finestre che causa un'eccezione di accesso alla memoria di runtime.
Esistono alcuni altri avvisi che potrebbero non essere strettamente correlati all'aggiornamento, ma che l'agente può facoltativamente correggere. Questi avvisi includono:
- Avvisi di conversione restrittiva relativi alle stringhe di caratteri multibyte e alle stringhe di caratteri estesi.
- Errore di digitazione nel nome di un file di output in un passaggio di compilazione personalizzato.
Configurazione
Installare gli strumenti di sviluppo
Per completare questa procedura dettagliata, è necessario seguire le istruzioni installazione per l'agente di modernizzazione GitHub Copilot per C++.
Clonare il repository
Aprire Visual Studio e nella finestra iniziale selezionare Clone un repository. Se la finestra iniziale non è visualizzata, è possibile aprirla tramite lafinestra di avvio>.
Per la posizione del repository, immettere: https://github.com/microsoft/VCSamples.git. Scegliere un percorso appropriato nel sistema in cui clonare il repository e fare clic sul pulsante Clona
Avviare l'aggiornamento
Caricare Hilo.sln in Visual Studio
Dopo aver clonato il repository, caricare il file della soluzione in <repo-root>/VC2013Samples/Hilo/C++/Hilo.sln. Per questa procedura dettagliata viene usata la versione fornita con Visual Studio 2013.
Usare Assistente configurazione per aggiornare i file di progetto
Se non sono installati gli strumenti v120, Visual Studio dovrebbe avviare la finestra Assistente configurazione per aiutarti a gestire i componenti mancanti. Quando viene visualizzata questa finestra, è consigliabile scegliere Retarget all e fare clic su Applica. Se la finestra non viene visualizzata, è possibile aprirla dal menu File facendo clic su Project>Reindirizza soluzione.
Avvia l'agente di modernizzazione di Copilot
Dopo che l'Assistente di configurazione ha aggiornato la destinazione del progetto, dovresti ricevere un messaggio nella barra informativa con un collegamento per avviare l'agente di modernizzazione. Facendo clic sul collegamento Run GitHub Copilot modernization for C++ viene avviato il processo di aggiornamento.
Se la barra informazioni non viene visualizzata, è possibile avviare l'agente facendo clic con il pulsante destro del mouse sulla soluzione nel Esplora soluzioni e scegliendo Modernize. Se si passa a tale route, è possibile avviare l'aggiornamento inviando il prompt I just updated MSVC Build Tools. Resolve any upgrade issues. a Copilot Chat.
Collaborazione con l'agente
Come interagire con l'agente per ottenere i risultati migliori
L'agente di modernizzazione .NET condivide lo stesso modello di interazione sottostante dell'agente C++. La documentazione Usare l'agente di modernizzazione per .NET illustra in dettaglio i modelli generali. Tenere presente che gli esempi e gli scenari in tale articolo sono specifici .NET e non si applicano direttamente a C++.
Per gli aggiornamenti di C++, altri suggerimenti possono aiutare l'agente a ottenere prestazioni buone:
- Specificare l'ambito. Invece di chiedere all'agente di aggiornare tutto contemporaneamente, indicare a quali progetti, librerie o diagnostica concentrarsi. Ad esempio: "Correggi gli avvisi di deprecazione C4996 nel progetto
NetworkClient." - Descrivi la diagnostica che prevedi che l'agente corregga. Se si conoscono i codici di avviso o di errore specifici introdotti dall'aggiornamento del set di strumenti, indicare all'agente in anticipo. Queste istruzioni aggiuntive aiutano l'agente a stabilire le priorità ed evitano di dedicare tempo a questioni non pertinenti.
- Assicurarsi che gli strumenti di modifica del codice C/C++ siano abilitati. Verificare che gli strumenti necessari siano disponibili nella configurazione prima di iniziare. Per informazioni dettagliate, vedere Strumenti di modifica del codice C/C++.
- Codificare le convenzioni di codifica usando istruzioni personalizzate. Linee guida per la codifica, ad esempio convenzioni di denominazione, API preferite o modelli da evitare, nelle istruzioni personalizzate. L'agente legge e segue queste istruzioni durante l'aggiornamento. Tra gli esempi utili di C++ ci sono convenzioni come "Preferisci
autoquando il tipo è ovvio" e "Segui la regola dello zero (o la regola del tre/cinque, quando la proprietà delle risorse lo richiede)."
Comportamenti previsti
Annotazioni
A causa della natura degli agenti di intelligenza artificiale basati su LLM, i passaggi eseguiti dall'agente e l'output prodotto possono differire da quanto illustrato di seguito.
Valutazione preliminare
L'agente determina innanzitutto l'ambiente in cui è in esecuzione, ad esempio il sistema di controllo del codice sorgente e per comprenderne l'obiettivo. In questo caso, rileva che si sta tentando di aggiornare il progetto per usare la versione più recente di MSVC e inizializza lo scenario appropriato. Crea un scenario.md file e un scenario-instructions.md file per contenere metadati sullo scenario.
Questi file contengono informazioni, ad esempio se l'agente deve operare in modalità automatica o guidata , qual è la strategia per l'esecuzione dei commit e altre informazioni che influiscono sul modo in cui l'agente deve procedere. Se si esprimono preferenze in un secondo momento durante il funzionamento dell'agente, l'agente può aggiungere tali preferenze al scenario-instructions.md file.
Assessment
Dopo l'inizializzazione, l'agente esegue una valutazione del progetto eseguendo una ricompilazione pulita del progetto e controllando l'output della compilazione per individuare errori e avvisi. Usando tali informazioni e il contesto che l'agente raccoglie dal repository, genera un file assessment.md che descrive i problemi individuati e se li considera compresi o esclusi dall'ambito dell'attività di aggiornamento.
Se l'agente opera in modalità Guided, si ferma qui e richiede la tua revisione della valutazione. Apportare le modifiche desiderate richiedendo all'agente o modificando direttamente il file Markdown e quindi continuare con la fase pianificazione . Se l'agente opera in modalità automatica , l'agente continua automaticamente alla fase successiva. Se si desidera modificare un elemento, è necessario arrestare l'agente premendo il pulsante annulla, apportare le modifiche e riprendere l'agente digitando il prompt "Riprendi" nella finestra di chat Copilot.
La valutazione identifica diversi dei problemi indicati in precedenza nella procedura dettagliata. Alcuni problemi non vengono visualizzati fino a un secondo momento perché sono nascosti da errori esistenti. Non preoccuparti, vengono scoperti più avanti. Se desideri che l'agente si metta in pausa per chiedere la tua approvazione in caso di problemi scoperti solo in un secondo momento, puoi specificare tali istruzioni nel file scenario-instructions.md.
Pianificazione
Quando l'agente avvia la fase di pianificazione, esegue un'analisi più approfondita dei problemi nell'ambito e propone possibili soluzioni in un file generato plan.md . Genera anche un tasks.md file che fornisce passaggi più strutturati e istruzioni per l'esecuzione del piano.
Come per la valutazione, le operazioni eseguite dall'agente dipendono dal funzionamento in modalità guidata o automatica . Se è in esecuzione in modalità guidata , l'agente ti offre la possibilità di indirizzarla per risolvere i problemi in alcuni modi o persino chiedere di trovare opzioni alternative con descrizioni più dettagliate dei compromessi. È anche possibile specificare altri vincoli, ad esempio convenzioni di codifica o passaggi di convalida speciali per alcuni problemi.
Esecuzione
Dopo aver approvato il piano (o una volta completata la pianificazione in modalità automatica ), l'agente passa alla fase di esecuzione. In questo caso inizia a gestire le attività che ha di fronte, adattandosi alle nuove informazioni individuate durante l'esecuzione. Con un'attenta osservazione, si noterà che l'agente individua i problemi nascosti in precedenza e ne regola il piano di conseguenza.
Il risultato finale della fase di esecuzione è una serie di commit nel tuo repository che risolvono i problemi inclusi nell’ambito di intervento e un progetto che può ora essere compilato con successo. Tuttavia, una compilazione pulita è solo uno dei passaggi per aggiornare il progetto. Deve anche funzionare correttamente.
Usare l'agente debugger per risolvere i problemi di runtime
Avviare il browser
Nel Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto Browser e scegliere Set as startup project. Avviare quindi una sessione del debugger del browser Hilo premendo F5 o selezionando Debug>Avvia debug dal menu file.
La sessione di debug dovrebbe interrompere quasi immediatamente un'eccezione di accesso alla memoria non gestita.
Esaminare l'eccezione di accesso in lettura alla memoria
Si userà l'agente debugger per analizzare questa eccezione e implementare una correzione. Fare clic sul pulsante Analyze con Copilot nella finestra delle informazioni sull'eccezione per avviare l'agente debugger.
L'agente debugger usa informazioni sullo stato del debug e del programma per determinare la causa radice degli errori di runtime e quindi analizza il codice sorgente per implementare una soluzione. In questo caso, l'agente rileva che l'accesso alla memoria non valido è dovuto a un'operazione di cast impropria che ha troncato un puntatore da 64 bit a soli 32 bit. Il puntatore non è ora valido e punta a una posizione di memoria non valida, che causa l'eccezione. Propone un metodo diverso per ottenere il tipo corretto ed evitare il troncamento.
Applicare le modifiche
Accettare le modifiche suggerite, arrestare la sessione di debug premendo MAIUSC + F5*, quindi avviare una nuova sessione premendo F5. Il progetto viene ricompilato con la modifica e Visual Studio avvia l'applicazione aggiornata. Dovrebbe essere visualizzata la finestra Hilo Browser.
Se si passa tempo all'esplorazione dell'applicazione, è possibile individuare altri problemi di runtime. Tutti gli altri problemi vengono lasciati come esercizi per il lettore. Ricordarsi di usare i nuovi strumenti agentici per raggiungere più velocemente l'obiettivo finale.
Sommario
Questa procedura dettagliata ha illustrato come gli agenti GitHub Copilot possono accelerare significativamente la modernizzazione dei progetti C++ meno recenti. L'agente di modernizzazione e l'agente del debugger possono collaborare per semplificare il processo di aggiornamento dalla valutazione iniziale tramite la convalida del runtime.
Vantaggi principali
- Rilevamento automatico dei problemi: gli agenti identificano sistematicamente le modifiche di rilievo, le deprecazioni e i problemi di compatibilità che derivano dagli aggiornamenti.
- Soluzioni intelligenti: anziché richiedere correzioni manuali, gli agenti analizzano il contesto del codice e propongono soluzioni appropriate personalizzate per la codebase.
- Efficienza: ciò che potrebbe richiedere giorni o settimane di lavoro manuale viene completato in ore, con l'agente che gestisce sia gli errori di compilazione che i problemi di runtime.
- Modalità guidate o automatiche: scegliere tra linee guida pratiche o esecuzione completamente automatizzata in base al livello di comfort e ai requisiti del progetto.
- Apprendimento e adattamento: gli agenti individuano problemi nascosti man mano che progrediscono e modificano il loro approccio di conseguenza, garantendo una copertura completa.
Contenuti correlati
- Panoramica della modernizzazione di GitHub Copilot per C++
- Installare GitHub Copilot modernizzazione per C++
- Risolvere i problemi di modernizzazione di C++ con GitHub Copilot
- Domande frequenti