Condividi tramite


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 come Watch, Automatiche, Variabili localie la finestra di dialogo QuickWatch mostrano le variabili archiviate in posizioni specifiche in memoria. La finestra memoria mostra l'immagine generale. 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 spazzatura in memoria non allocata.

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 di debug a livello di indirizzo in Tools>Opzioni (o opzioni Debug>) >Debug>Generale.

Aprire una finestra Memoria:

  1. Assicurarsi che Abilita il debug a livello di indirizzo sia selezionata in Strumenti>Opzioni (o Debug>Opzioni) >Debug>Generale.

  2. Avviare il debug selezionando la freccia verde, premendo F5oppure selezionando Debug>Avvia debug.

  3. In Debug>Windows>Memoria, selezionare Memoria 1, Memoria 2, Memoria 3o Memoria 4. Alcune edizioni di Visual Studio offrono una sola finestra memoria.

Più finestre consentono di mantenere le visualizzazioni per aree diverse nello spazio di memoria contemporaneamente.

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 più elevati 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.

Nella maggior parte degli scenari si vuole trovare una posizione di memoria specifica.

Trovare una posizione di memoria

È possibile andare immediatamente a un indirizzo specificato nella finestra Memoria utilizzando il trascinamento della selezione oppure immettendo l'indirizzo nel campo Indirizzo. Il campo Address accetta indirizzi alfanumerici ed espressioni che restituiscono indirizzi, come ad esempio e.User.NonroamableId.

Per forzare la rivalutazione immediata di un'espressione nel campo Indirizzo , selezionare l'icona Rivaluta automaticamente a forma di freccia arrotondata.

Di default, la finestra Memory considera le espressioni Address come espressioni attive, che vengono rivalutate man mano che l'app viene eseguita. Le espressioni attive possono essere utili, ad esempio, per visualizzare la memoria toccata da una variabile puntatore.

Usare il trascinamento della selezione per passare a una posizione di memoria:

  1. In qualsiasi finestra del debugger selezionare un indirizzo di memoria o una variabile puntatore che contiene un indirizzo di memoria.

  2. Trascina e rilascia l'indirizzo o il puntatore nella finestra di memoria .

    Tale indirizzo appare nel campo Address, e la finestra Memoria si regola per visualizzare tale indirizzo in cima.

Immettere una posizione nel campo Indirizzo per passare a una posizione di memoria:

  • Digitare o incollare l'indirizzo o l'espressione nel campo Indirizzo e premere Inviooppure scegliere l'indirizzo nel campo Indirizzo.

    Tale indirizzo appare nel campo Indirizzo e la finestra Memoria si regola per visualizzare l'indirizzo nella parte superiore.

    Screenshot della finestra Memoria.

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. È possibile personalizzare il modo in cui la finestra memoria mostra il contenuto della memoria.

Modificare 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.

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 automatico per la regolazione automatica in base alla larghezza della finestra.

Se non si desidera che il contenuto della finestra di memoria venga modificato durante l'esecuzione dell'applicazione, è possibile disattivare la valutazione dell'espressione live.

Attiva/Disattiva valutazione in tempo reale:

  • Fare clic con il pulsante destro del mouse nella finestra Memoria e scegliere Rivaluta Automaticamente nel menu di scelta rapida.

    Nota

    La valutazione delle espressioni live è un'alternativa, ed è attiva per impostazione predefinita, quindi selezionando Rivalutare automaticamente la si disattiva. Se selezioni di nuovo Rivalutare automaticamente, lo riattiva.

È 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.

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 viene visualizzata o scompare, a seconda dello stato precedente.

Seguire un puntatore attraverso la memoria (C/C++)

Nelle app di codice nativo è possibile usare i nomi di registrazione come espressioni attive. Ad esempio, è possibile usare il puntatore dello stack per tracciare lo stack.

Seguire un puntatore attraverso la memoria:

  1. Nella finestra memoria campo Indirizzo immettere un'espressione puntatore nell'ambito corrente. A seconda della lingua, potrebbe essere necessario dereferenziarla.

  2. Premere INVIO.

    Quando si usa un comando di debug, ad esempio Step, l'indirizzo di memoria visualizzato nel campo indirizzo e nella parte superiore della finestra memoria cambia automaticamente quando cambia il puntatore.

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 heap , è possibile farlo usando {CLR}@Address notazione. L'indirizzo deve essere un puntatore alla memoria, ad esempio 0x1D102A581B0. Immettere il puntatore alla memoria usando la notazione {CLR}@Address nel campo Indirizzo della finestra Memoria. In alternativa, è possibile utilizzare la stessa notazione per aggiungere un orologio nella finestra di monitoraggio .

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 della memoria. Fare clic con il pulsante destro del mouse sull'oggetto a cui si è interessati e scegliere Visualizza istanze.