Procedura dettagliata: Aggiornamento di Microsoft C++ (MSVC) Build Tools per il progetto di esempio Hilo

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.

Screenshot della finestra principale dell'applicazione Hilo che mostra il contenuto della cartella Immagini dell'utente.

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_of modello di classe viene usato in diverse posizioni, ma non è più disponibile nella libreria standard C++ di MSVC perché is_base_of il modello di classe è stato promosso come parte dello standard completo. Si tratta di un errore di blocco.
  • La ID2D1Factory::GetDesktopDpi funzione è 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>.

Schermata della finestra Start di Visual Studio con il link Clona un repository evidenziato.

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

Screenshot della finestra

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.

Schermata della finestra dell'Assistente configurazione che mostra i progetti Hilo. Sono tutti selezionati per il reindirizzamento e il pulsante Applica è evidenziato.

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.

Screenshot del messaggio della barra delle informazioni in Visual Studio per avviare l'agente di modernizzazione.

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 auto quando 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.

Schermata dei contenuti di un file scenario-instructions.md.

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.

Schermata del contenuto renderizzato di un file assessment.md.

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.

Schermata del contenuto renderizzato di un file plan.md.

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.

Schermata dell'agente nel mezzo della fase di esecuzione, che reagisce ai problemi appena individuati.

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.

Schermata dell'eccezione di accesso in lettura alla memoria durante il primo avvio del browser Hilo.

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.

Screenshot della finestra delle eccezioni per il browser Hilo con il pulsante Analizza con Copilot evidenziato.

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.

Screenshot della finestra principale dell'applicazione Hilo che mostra il contenuto della cartella Immagini dell'utente.

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.