Visualizzazione e modifica di variabili locali in WinDbg (versione classica)

In WinDbg è possibile visualizzare le variabili locali immettendo i comandi, usando la finestra Variabili locali o la finestra Espressione di controllo.

Finestra di comando del debugger

È possibile visualizzare variabili e parametri locali immettendo il comando dv o il comando dt nella finestra Comando debugger.

Apertura della finestra Variabili locali

Nella finestra Variabili locali vengono visualizzate informazioni su tutte le variabili locali nell'ambito corrente.

Per aprire o passare alla finestra Variabili locali, nella finestra WinDbg scegliere Variabili locali dal menu Visualizza. È anche possibile premere ALT+3 o selezionare il pulsante Variabili locali sulla barra degli strumenti. ALT+MAIUSC+3 chiude la finestra Variabili locali.

La schermata seguente mostra un esempio di finestra Variabili locali.

Screenshot della finestra Variabili locali in WinDbg.

La finestra Variabili locali può contenere quattro colonne. Le colonne Nome e Valore vengono sempre visualizzate e le colonne Tipo e Posizione sono facoltative. Per visualizzare le colonne Tipo e Posizione , selezionare rispettivamente i pulsanti Typecast e Locations sulla barra degli strumenti.

Uso della finestra Variabili locali

Nella finestra Variabili locali è possibile eseguire le operazioni seguenti:

  • Nella colonna Nome viene visualizzato il nome di ogni variabile locale. Se una variabile è una struttura di dati, accanto al nome viene visualizzata una casella di controllo. Per espandere o comprimere la visualizzazione dei membri della struttura, selezionare o deselezionare la casella di controllo.

  • Nella colonna Valore viene visualizzato il valore corrente di ogni variabile.

    • Per immettere un nuovo valore per la variabile, fare doppio clic sul valore corrente e digitare il nuovo valore oppure modificare il valore precedente. I comandi taglia, copia e incolla sono disponibili per la modifica. È possibile digitare qualsiasi espressione C++.
    • Per salvare il nuovo valore, premere INVIO.
    • Per rimuovere il nuovo valore, premere ESC.
    • Se si digita un valore non valido, il valore precedente verrà visualizzato nuovamente quando si preme INVIO.

    I numeri interi di tipo int vengono visualizzati come valori decimali; i numeri interi di tipo UINT vengono visualizzati nel radix corrente. Per modificare il radix corrente, usare il comando n (Set Number Base) nella finestra Di comando del debugger.

  • La colonna Tipo ,se visualizzata nella finestra Variabili locali, mostra il tipo di dati corrente di ogni variabile. Ogni variabile viene visualizzata nel formato appropriato per il proprio tipo di dati. Le strutture di dati hanno i nomi dei tipi nella colonna Tipo . Altri tipi di variabili visualizzano "Immettere nuovo tipo" in questa colonna.

    Se si fa doppio clic su "Enter new type", è possibile eseguire il cast del tipo immettendo un nuovo tipo di dati. Questo cast modifica la visualizzazione corrente di questa variabile solo nella finestra Variabili locali; non cambia nulla nel debugger o nel computer di destinazione. Inoltre, se si immette un nuovo valore nella colonna Valore , il testo immesso verrà analizzato in base al tipo effettivo del simbolo, anziché a qualsiasi nuovo tipo immesso nella colonna Tipo . Se si chiude e si riapre la finestra Variabili locali, il tipo di dati cambia.

    È anche possibile immettere un comando di estensione nella colonna Tipo . Il debugger passerà l'indirizzo del simbolo a questa estensione e visualizzerà l'output risultante in una serie di righe compressi sotto la riga corrente. Ad esempio, se il simbolo in questa riga è un indirizzo valido per un blocco di ambiente thread, è possibile immettere !teb nella colonna Tipo per eseguire l'estensione !teb nell'indirizzo del simbolo.

  • La colonna Location (se visualizzata nella finestra Variabili locali) mostra l'offset di ogni membro di una struttura di dati.

  • Se una variabile locale è un'istanza di una classe che contiene tabelle Vtable, nella colonna Nome vengono visualizzate le tabelle Vtable ed è possibile espandere le tabelle virtuali per visualizzare i puntatori a funzione. Se una tabella Vtable è contenuta in una classe base che punta a un'implementazione derivata, la notazione _vtcast_Class viene visualizzata per indicare i membri aggiunti a causa della classe derivata. Questi membri si espandono come il tipo di classe derivata.

  • Il contesto locale determina quale set di variabili locali verrà visualizzato nella finestra Variabili locali. Quando il contesto locale cambia per qualsiasi motivo, la finestra Variabili locali viene aggiornata automaticamente. Per impostazione predefinita, il contesto locale corrisponde alla posizione corrente del contatore del programma. Per altre informazioni su come modificare il contesto locale, vedere Contesto locale.

La finestra Variabili locali include una barra degli strumenti che contiene due pulsanti (Typecast e Posizioni) e un menu di scelta rapida con comandi aggiuntivi. Per accedere al menu, selezionare e tenere premuto (o fare clic con il pulsante destro del mouse) sulla barra del titolo della finestra oppure selezionare l'icona nell'angolo superiore destro della finestra. La barra degli strumenti e il menu contengono i pulsanti e i comandi seguenti.

  • (Barra degli strumenti e menu) Typecast attiva e disattiva la visualizzazione della colonna Tipo .

  • (Barra degli strumenti e menu) Le posizioni attivano e disattivano la visualizzazione della colonna Location .

  • (solo menu) Visualizza i valori a 16 bit quando Unicode visualizza stringhe Unicode in questa finestra. Questo comando attiva e disattiva un'impostazione globale che influisce sulla finestra Variabili locali, sulla finestra Espressioni di controllo e sull'output del comando del debugger. Questo comando equivale all'uso del comando .enable_unicode (Abilita visualizzazione Unicode).

  • (solo menu) Visualizza sempre i numeri nel formato radix predefinito causa la visualizzazione di numeri interi nel formato radix predefinito anziché visualizzarli in formato decimale. Questo comando attiva e disattiva un'impostazione globale che influisce sulla finestra Variabili locali, sulla finestra Espressioni di controllo e sull'output del comando del debugger. Questo comando equivale all'uso del comando .force_radix_output (usare Radix per numeri interi).

    Nota Il comando Radix predefinito Visualizza sempre i numeri non influisce sugli interi lunghi. I numeri interi lunghi vengono visualizzati in formato decimale, a meno che non sia impostato il comando .enable_long_status (Abilita visualizzazione intero lungo). Il comando .enable_long_status influisce sulla visualizzazione nella finestra Variabili locali, nella finestra Espressione di controllo e nell'output dei comandi del debugger; non esiste alcun equivalente per questo comando nel menu nella finestra Variabili locali.

  • (solo menu) Aprire la finestra memoria per il valore selezionato apre una nuova finestra Memoria ancorata che visualizza la memoria a partire dall'indirizzo dell'espressione selezionata.

  • (solo menu) Richiamare dt per il valore di memoria selezionato esegue il comando dt (Tipo di visualizzazione) con il simbolo selezionato come parametro. Il risultato viene visualizzato nella finestra Del comando del debugger. L'opzione -n viene usata automaticamente per distinguere il simbolo da un indirizzo esadecimale. Non vengono usate altre opzioni. Si noti che il contenuto prodotto tramite questa selezione di menu è identico al contenuto prodotto durante l'esecuzione del comando dt dalla riga di comando, ma il formato è leggermente diverso.

  • (solo menu) La barra degli strumenti attiva e disattiva la barra degli strumenti.

  • (solo menu) Dock o Undock fa sì che la finestra entri o lasci lo stato ancorato.

  • (solo menu) Passare al nuovo dock chiude la finestra Variabili locali e la apre in un nuovo dock.

  • (solo menu) Impostare come destinazione di tabulazione per il tipo di finestra non è disponibile per la finestra Variabili locali. Questa opzione è disponibile solo per le finestre Origine o Memoria.

  • (solo menu) La virgola mobile fa sì che la finestra rimanga non ancorata anche se viene trascinata in una posizione di ancoraggio.

  • (solo menu) Lo spostamento con frame comporta lo spostamento della finestra quando il frame WinDbg viene spostato, anche se la finestra viene scollegata.

  • (solo menu) La Guida apre questo argomento nella documentazione degli strumenti di debug per Windows.

  • (solo menu) Chiudi chiude questa finestra.

Finestra Espressione di controllo

In WinDbg è possibile usare la finestra Espressione di controllo per visualizzare e modificare le variabili locali. La finestra Espressione di controllo può visualizzare qualsiasi elenco di variabili desiderate. Queste variabili possono includere variabili globali e variabili locali da qualsiasi funzione. In qualsiasi momento, nella finestra Espressione di controllo vengono visualizzati i valori di tali variabili che corrispondono all'ambito della funzione corrente. È anche possibile modificare i valori di queste variabili tramite la finestra Espressione di controllo.

A differenza della finestra Variabili locali, la finestra Espressioni di controllo non è interessata dalle modifiche apportate al contesto locale. Solo le variabili definite nell'ambito del contatore del programma corrente possono visualizzare o modificare i valori.

Per aprire la finestra Espressione di controllo, scegliere Espressione di controllo dal menu Visualizza . È anche possibile premere ALT+2 o selezionare il pulsante Espressione di controllo sulla barra degli strumenti. ALT+MAIUSC+2 chiude la finestra Espressione di controllo.

La schermata seguente mostra un esempio di finestra Espressione di controllo.

Screenshot della finestra Espressione di controllo in WinDbg.

La finestra Espressione di controllo può contenere quattro colonne. Le colonne Nome e Valore vengono sempre visualizzate e le colonne Tipo e Posizione sono facoltative. Per visualizzare le colonne Tipo e Posizione , selezionare rispettivamente i pulsanti Typecast e Locations sulla barra degli strumenti.

Vedi anche

Per altre informazioni sul controllo delle variabili locali, una panoramica dell'uso delle variabili e della modifica dell'ambito e una descrizione di altri comandi correlati alla memoria, vedere Lettura e scrittura di memoria.