Uso della finestra Espressioni di controllo - WinDbg (versione classica)
Nella finestra Espressioni di controllo vengono visualizzate informazioni sulle variabili globali, sulle variabili locali e sui registri. È possibile personalizzare questa finestra per visualizzare gli elementi monitorati.
Apertura della finestra Espressione di controllo
Per aprire o passare alla finestra Espressione di controllo, nella finestra WinDbg scegliere Espressione di controllo dal menu Visualizza.
È anche possibile premere ALT+2 o fare clic sul pulsante Espressione di controllo (ALT+2) sulla barra degli strumenti:
ALT+MAIUSC+2 chiuderà la finestra Espressione di controllo.
La schermata seguente mostra un esempio di finestra Espressione di controllo.
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 , fare clic rispettivamente sui pulsanti Typecast e Locations sulla barra degli strumenti.
Nella finestra Espressione di controllo è possibile eseguire le operazioni seguenti:
Per aggiungere una variabile alla finestra Espressione di controllo, selezionare la prima cella vuota nella colonna Nome , digitare il nome della variabile e quindi premere INVIO. Separare il nome del modulo dalla variabile con un punto esclamativo (!). Se non si specifica un modulo, viene usato il modulo corrente. Per immettere un indirizzo nel campo Nome , l'indirizzo deve iniziare con una cifra decimale (se necessario, usare il prefisso 0x).
Se il nome della variabile immesso viene definito nell'ambito della funzione corrente, il relativo valore viene visualizzato nella colonna Valore . Se non è definito, nella colonna Valoreviene visualizzato "Errore: Impossibile ottenere il valore".
Anche se una variabile non è definita, può essere utile aggiungerla alla finestra Espressione di controllo. Se il contatore del programma immette una funzione in cui viene definita una variabile di questo nome, il relativo valore viene visualizzato nella finestra in quel momento.
Per rimuovere una variabile dalla finestra Espressione di controllo, fare doppio clic sul nome, premere CANC e quindi premere INVIO. È anche possibile sostituire un nome precedente con un nuovo nome facendo doppio clic sul nome precedente, digitando il nuovo nome e quindi premendo INVIO.
Se una variabile è una struttura di dati, accanto al nome viene visualizzata una casella di controllo. Per espandere e comprimere la visualizzazione dei membri della struttura, selezionare o deselezionare la casella di controllo.
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.
Per modificare il valore di una variabile locale, fare doppio clic sulla cella Value . Immettere il nuovo valore o modificare il valore precedente. I comandi taglia, copia e incolla sono disponibili per la modifica. Il valore immesso può includere qualsiasi espressione C++. Dopo aver immesso un nuovo valore o aver modificato il valore precedente, è possibile premere INVIO per archiviare il nuovo valore o premere ESC per eliminarlo. Se si invia un valore non valido, il valore precedente verrà visualizzato nuovamente dopo aver premuto 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 Espressione di controllo, 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 Espressione di controllo; 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 Espressione di controllo, 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 Espressione di controllo) mostra l'offset di ogni membro di una struttura di dati.
Oltre alle variabili, è anche possibile monitorare gli elementi seguenti nella finestra Espressione di controllo:
- Registri. Quando si aggiunge un registro alla finestra Espressione di controllo, anteporre il nome a un segno (@). A differenza delle variabili, non è possibile modificare i valori di registrazione tramite la finestra Espressione di controllo.
- Vtable che contengono puntatori a funzione. Quando viene visualizzata una tabella virtuale nella finestra Espressione di controllo, è possibile esplorare le voci della funzione nella tabella. 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.
- Valori restituiti delle funzioni di estensione, ad esempio _EFN_GetPoolData.
A differenza della finestra Variabili locali, la finestra Espressioni di controllo non è influenzata dalle modifiche apportate al contesto di registrazione. Nella finestra Espressione di controllo è possibile visualizzare e modificare solo le variabili definite nell'ambito del contatore del programma corrente.
Se si apre una nuova area di lavoro, il contenuto della finestra Espressioni di controllo viene rimosso e sostituito con quelli nella nuova area di lavoro.
Menu di scelta rapida e barra degli strumenti
La finestra Espressione di controllo 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, fare clic con il pulsante destro del mouse sulla barra del titolo della finestra o scegliere l'icona nell'angolo superiore destro della finestra: Espressioni di controllo.
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 invece di visualizzarli sempre 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 venga usato 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 del comando del debugger. Non esiste alcun equivalente per questo comando nel menu nella finestra Espressione di controllo.
(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 usando 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 Espressione di controllo e la apre in un nuovo dock.
(solo menu) Impostare come destinazione di tabulazione per il tipo di finestra non è disponibile per la finestra Espressione di controllo. 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.
Vedi anche
Per altre informazioni sul controllo delle variabili e sulla descrizione di altri comandi correlati alla memoria, vedere Lettura e scrittura di memoria. Per altre informazioni sui registri e sulla relativa manipolazione, vedere Visualizzazione e modifica dei registri in WinDbg (versione classica).