Usare le finestre Memoria nel debugger di Visual Studio (C#, C++, Visual Basic, F#)
Durante il debug, la finestra Memoria mostra lo spazio di memoria usato dall'app.
Le finestre del debugger, ad esempio Espressioni di controllo, Auto, Variabili locali e la finestra di dialogo Controllo immediato mostrano le variabili archiviate in posizioni specifiche in memoria. La finestra Memoria mostra l'immagine complessiva. La visualizzazione memoria è utile per esaminare grandi parti di dati (buffer o stringhe di grandi dimensioni, ad esempio) che non vengono visualizzate bene nelle altre finestre.
La finestra Memoria non è limitata alla visualizzazione dei dati. Visualizza tutti gli elementi nello spazio di memoria, inclusi dati, codice e bit casuali di Garbage in memoria non assegnata.
La finestra Memoria non è disponibile per il debug di script o SQL. Questi linguaggi non riconoscono il concetto di memoria.
Aprire una finestra Memoria
Analogamente ad altre finestre del debugger, le finestre Memoria sono disponibili solo durante una sessione di debug.
Importante
Per abilitare le finestre Memoria, è necessario selezionare Abilita debug a livello di indirizzo in Opzioni strumenti> (o Opzioni di>debug>) >Debug generale.
Per aprire una finestra Memoria
Assicurarsi che l'opzione Abilita debug a livello di indirizzo sia selezionata in Opzioni strumenti> (o Opzioni di>debug>) >Debug generale.
Avviare il debug selezionando la freccia verde, premendo F5 o selezionando Debug>Avvia debug.
In Debug>memoria Windows>selezionare Memoria 1, Memoria 2, Memoria 3 o Memoria 4. Alcune edizioni di Visual Studio offrono solo una Finestra memoria .
Spostarsi nella finestra Memoria
Lo spazio degli indirizzi di un computer è grande e puoi facilmente perdere la tua posizione scorrendo nella finestra Memoria .
Gli indirizzi di memoria superiori vengono visualizzati nella parte inferiore della finestra. Per visualizzare un indirizzo superiore, scorrere verso il basso. Per visualizzare un indirizzo inferiore, scorrere verso l'alto.
È possibile passare immediatamente a un indirizzo specificato nella finestra Memoria usando il trascinamento della selezione o immettendo l'indirizzo nel campo Indirizzo . Il campo Indirizzo accetta indirizzi alfanumerici ed espressioni che restituiscono indirizzi, ad esempio e.User.NonroamableId
.
Per forzare la rivalutazione immediata di un'espressione nel campo Indirizzo , selezionare l'icona a forma di freccia arrotondata Rivaluta automaticamente .
Per impostazione predefinita, la finestra Memoria considera le espressioni Address come espressioni attive, che vengono rivalutate durante l'esecuzione dell'app. Le espressioni attive possono essere utili, ad esempio, per visualizzare la memoria toccata da una variabile puntatore.
Per usare il trascinamento della selezione per passare a una posizione di memoria:
In qualsiasi finestra del debugger selezionare un indirizzo di memoria o una variabile puntatore che contiene un indirizzo di memoria.
Trascinare e rilasciare l'indirizzo o il puntatore nella finestra Memoria . Tale indirizzo viene quindi visualizzato nel campo Indirizzo e la finestra Memoria viene modificata per visualizzare tale indirizzo nella parte superiore.
Per passare a una posizione di memoria immettendola nel campo Indirizzo:
- Digitare o incollare l'indirizzo o l'espressione nel campo Indirizzo e premere INVIO oppure selezionarlo dall'elenco a discesa nel campo Indirizzo . La finestra Memoria viene modificata per visualizzare l'indirizzo nella parte superiore.
Personalizzare la finestra Memoria
Per impostazione predefinita, il contenuto della memoria viene visualizzato come numeri interi a 1 byte in formato esadecimale e la larghezza della finestra determina il numero di colonne visualizzate. È inoltre possibile personalizzare il modo in cui il contenuto della memoria viene visualizzato nella finestra Memoria.
Per cambiare il formato del contenuto della memoria:
- Fare clic con il pulsante destro del mouse nella finestra Memoria e scegliere i formati desiderati dal menu di scelta rapida.
Per modificare il numero di colonne nella finestra Memoria:
- Selezionare la freccia a discesa accanto al campo Colonne e selezionare il numero di colonne da visualizzare oppure selezionare Auto per la regolazione automatica in base alla larghezza della finestra.
Se non vuoi che il contenuto della finestra Memoria cambi durante l'esecuzione dell'app, puoi disattivare la valutazione delle espressioni in tempo reale.
Per attivare o disattivare la valutazione diretta:
Fare clic con il pulsante destro del mouse nella finestra Memoria e scegliere Rivaluta automaticamente nel menu di scelta rapida.
Nota
La valutazione dell'espressione dinamica è un interruttore ed è attivata per impostazione predefinita, quindi selezionando Rivalutazione disattiva automaticamente . Se si seleziona Rivaluta automaticamente , viene riattivato.
È possibile nascondere o visualizzare la barra degli strumenti nella parte superiore della finestra Memoria. Non sarà possibile accedere al campo Indirizzo o ad altri strumenti quando la barra degli strumenti è nascosta.
Per attivare o disattivare la visualizzazione della barra degli strumenti:
- Fare clic con il pulsante destro del mouse nella finestra Memoria e scegliere Mostra barra degli strumenti nel menu di scelta rapida. La barra degli strumenti verrà visualizzata o nascosta, a seconda del precedente stato.
Seguire un puntatore alla memoria (C/C++)
Nelle app di codice nativo è possibile usare i nomi di registrazione come espressioni attive. È possibile, ad esempio, utilizzare il puntatore dello stack per seguire lo stack.
Per osservare il movimento di un puntatore in memoria:
Nel campo Indirizzo della finestra Memoria immettere un'espressione puntatore che si trova nell'ambito corrente. A seconda del linguaggio, può essere necessario dereferenziarla.
Premere INVIO.
Quando si usa un comando di debug, ad esempio Passaggio, l'indirizzo di memoria visualizzato nel campo Indirizzo e nella parte superiore della finestra Memoria cambia automaticamente quando il puntatore cambia.
Visualizzare i puntatori alla memoria (.NET)
Se si desidera visualizzare il contenuto di un oggetto .NET basato su un puntatore alla memoria, ad esempio un indirizzo ottenuto da uno snapshot dell'heap, è possibile farlo usando {CLR}@Address
la notazione. L'indirizzo deve essere un puntatore alla memoria, ad esempio 0x1D102A581B0. Immettere il puntatore alla memoria usando {CLR}@Address
la notazione nel campo Indirizzo della finestra Memoria. In alternativa, è possibile usare la stessa notazione per aggiungere un orologio usando la finestra Espressione di controllo.
Per ottenere l'indirizzo del puntatore di memoria da uno snapshot dell'heap, aprire il dump dell'heap, scegliere Debug della memoria gestita, che apre lo strumento Utilizzo memoria. Fare clic con il pulsante destro del mouse sull'oggetto a cui si è interessati e scegliere Visualizza istanze.