Condividi tramite


Usare le mappe codice per eseguire il debug delle applicazioni

Le mappe del codice in Visual Studio consentono di evitare di perdersi in codebase di grandi dimensioni, codice non familiare o codice legacy. Ad esempio, quando si esegue il debug, potrebbe essere necessario esaminare il codice in molti file e progetti. Usare le mappe codice per esplorare queste parti di codice e comprendere le relazioni tra loro. In questo modo, non è necessario tenere traccia di questo codice a mente o creare un diagramma separato. Se il lavoro viene interrotto, le mappe codice consentono di aggiornare la memoria relativa al codice usato.

Code map - Map relationships in code

Una freccia verde mostra dove viene visualizzato il cursore nell'editor

Per informazioni dettagliate sui comandi e sulle azioni che è possibile usare quando si usano le mappe codice, vedere Esplorare e ridisporre le mappe del codice.

Altre informazioni sul debug in Visual Studio con lo strumento Debugger.

Nota

Per creare e modificare mappe codice, è necessario Visual Studio Enterprise Edition. Nelle edizioni Community e Professional di Visual Studio è possibile aprire diagrammi generati nell'edizione Enterprise, ma non modificarli.

Informazioni sul problema

Si supponga che sia presente un bug in un programma di disegno su cui si sta lavorando. Per riprodurre il bug, aprire la soluzione in Visual Studio e premere F5 per avviare il debug.

Quando disegnare una linea e scegliere Annulla l'ultimo tratto, non succede nulla finché non si disegna la riga successiva.

Code map - Repro bug

Di conseguenza, iniziare l'analisi cercando il metodo Undo. Il metodo si trova nella classe PaintCanvas.

Code map - Find code

Avviare il mapping del codice

A questo punto è possibile avviare il mapping del metodo undo e le relative relazioni. Nell'editor di codice aggiungere il metodo undo e i campi a cui viene fatto riferimento a una nuova mappa codici. Quando si crea una nuova mappa, l'indicizzazione del codice potrebbe richiedere del tempo. Ciò consente alle operazioni successive di essere eseguite più velocemente.

Code map - Show method and related fields

Suggerimento

L'evidenziazione verde indica gli ultimi elementi aggiunti alla mappa. La freccia verde mostra la posizione del cursore nel codice. Le frecce tra gli elementi rappresentano relazioni diverse. È possibile ottenere altre informazioni sugli elementi nella mappa spostandovi sopra il mouse ed esaminando le relative descrizioni comandi.

Code map - Show tooltips

Per visualizzare la definizione del codice per ogni campo, fare doppio clic sul campo sulla mappa oppure selezionare il campo e premere F12. La freccia verde si sposta tra gli elementi nella mappa. Il cursore nell'editor di codice viene spostato automaticamente.

Screenshot of a code map window with the history field selected and a code editor window where all instances of history are highlighted.

Screenshot of a code map window with the paintObjects field selected and a code editor window where all instances of paintObjects are highlighted.

Suggerimento

È inoltre possibile spostare la freccia verde sulla mappa spostando il cursore nell'editor di codice.

Informazioni sulle relazioni tra parti di codice

A questo punto si desidera sapere quale altro codice interagisce con i campi history e paintObjects. È possibile aggiungere tutti i metodi che fanno riferimento a questi campi alla mappa. Questa operazione può essere eseguita dalla mappa o dall'editor di codice.

Code map - Find all references

Open a code map from the code editor

Nota

Se si aggiungono elementi da un progetto condiviso in più applicazioni, ad esempio Windows Phone o Windows Store, tali elementi vengono sempre visualizzati nella mappa insieme al progetto di app attualmente attivo. Se pertanto si modifica il contesto in un altro progetto di app, il contesto nella mappa viene modificato anche per tutti gli elementi appena aggiunti dal progetto condiviso. Le operazioni eseguite con un elemento nella mappa si applicano solo agli elementi che condividono lo stesso contesto.

Modificare il layout per ridisporre il flusso di relazioni e rendere la mappa più facile da leggere. È inoltre possibile spostare elementi nella mappa trascinandoli.

Screenshot of a code map window with the Layout menu open and the Left to Rgiht command selected.

Suggerimento

Per impostazione predefinita, il layout incrementale è attivato. Ciò consente di ridisporre la mappa il meno possibile quando vengono aggiunti nuovi elementi. Per riorganizzare l'intera mappa ogni volta che si aggiungono nuovi elementi, disattivare Layout incrementale.

Screenshot of a code map window with the relationshiop arrows between the fields pointing from left to right.

Esaminiamo questi metodi. Sulla mappa fare doppio clic sul metodo PaintCanvas oppure selezionare questo metodo e premere F12. Questo metodo crea history e paintObjects come elenchi vuoti.

Screenshot of a code map window with the PaintCanvas method selected and a code snippet image showing the PainCanvas method name highlighted.

A questo punto, ripetere gli stessi passaggi per esaminare la definizione del metodo clear. Il metodo clear esegue alcune attività con paintObjects e history e quindi chiama il metodo Repaint.

Screenshot of a code map window with the Clear method selected and a code snippet image showing the code for the Clear method.

A questo punto, esaminare la definizione del metodo addPaintObject. Tale metodo esegue alcune attività con history e paintObjects. e chiama inoltre Repaint.

Screenshot of a code map window with the addPaintObject method selected and a code snippet image showing the code for the addPaintObject method.

Individuare il problema esaminando il mapping

Sembra che tutti i metodi che modificano history e paintObjects chiamino Repaint. Tuttavia il metodo undo non chiama Repaint, anche se undo modifica gli stessi campi. Pertanto, è possibile risolvere il problema chiamando Repaint da undo.

Code map - Find missing method call

Se non fosse stata disponibile una mappa che mostrava questa chiamata mancante, sarebbe stato più difficile individuare il problema, specialmente in caso di codice più complesso.

Condividere l'individuazione e passaggi successivi

Prima che l'utente o un altro sviluppatore corregga il bug, è possibile inserire note nella mappa sul problema e su come correggerlo.

Code map - Comment and flag items for followup

Ad esempio, è possibile aggiungere commenti alla mappa e contrassegnare gli elementi usando i colori.

Code map - Commented and flagged items

Se Microsoft Outlook è installato, è possibile inviare la mappa ad altre persone tramite posta elettronica. È inoltre possibile esportare la mappa come un'immagine o in un altro formato.

Code map - Share, export, mail

Correggere il problema e visualizzare le operazioni effettuate

Per correggere il bug, aggiungere la chiamata per Repaint a undo.

Code map - Add missing method call

Per confermare la correzione, riavviare la sessione di debug e tentare di riprodurre il bug. Ora scegliendo Annulla l'ultimo tratto funziona come previsto e conferma che hai apportato la correzione corretta.

Code map - Confirm code fix

È possibile aggiornare la mappa per mostrare la correzione apportata.

Code map - Update map with missing method call

La mappa mostra ora un collegamento tra annulla e Repaint.

Code map - Updated map with method call

Nota

Quando si aggiorna la mappa, è possibile che venga visualizzato un messaggio che indica che l'indice di codice usato per creare la mappa è stato aggiornato. Ciò significa che un utente ha modificato il codice e di conseguenza la mappa non corrisponde al codice corrente. L'aggiornamento della mappa non verrà arrestato, ma potrebbe essere necessario ricreare la mappa per confermare che corrisponde al codice.

Ora hai finito con l'indagine. Il problema è stato individuato e corretto eseguendo il mapping del codice. Si dispone inoltre di una mappa che consente di spostarsi nel codice e di ricordare quanto indicato e che mostra i passaggi eseguiti per correggere il problema.