Condividi tramite


Funzionalità comuni dell'analizzatore di espressioni

Le informazioni contenute in questo argomento sono valide per:

Edizione

Visual Basic

C#

F#

C++

Web Developer

Express

Argomento applicabile Argomento applicabile Argomento applicabile Argomento applicabile Argomento applicabile

Pro, Premium e Ultimate

Argomento applicabile Argomento applicabile Argomento applicabile Argomento applicabile Argomento applicabile

In questo argomento vengono descritte diverse funzionalità dell'analizzatore di espressioni che sono comuni a quelle del debugger e variano solo in base al linguaggio.

Variabili implicite

In Visual Basic e C# è possibile creare variabili implicite mediante l'analizzatore di espressioni. Queste variabili implicite non diventano mai esterne all'ambito e possono essere utilizzate come qualsiasi altra variabile.

In C# è possibile creare una variabile implicita dichiarandola nell'analizzatore di espressioni. Ad esempio, è possibile immettere il seguente codice C# nella finestra di controllo immediato:

int b = 100;

Quando si esegue il codice sopra riportato nella finestra di controllo immediato, nella finestra Variabili locali viene visualizzato il nome della nuova variabile implicita preceduto dal segno $, in questo caso $b.

In Visual Basic non è possibile dichiarare variabili implicite nell'analizzatore di espressioni. Tuttavia, se si utilizza una variabile non dichiarata nell'analizzatore di espressioni di Visual Basic, viene creata automaticamente una variabile implicita. In Visual Basic le variabili implicite non sono elencate nella finestra Variabili locali.

Punti di interruzione

Se si utilizza la finestra di controllo immediato per valutare un metodo o una funzione Visual Basic o C# che contiene un punto di interruzione, viene raggiunto tale punto di interruzione e viene visualizzato un nuovo frame in Stack di chiamate. Di seguito è riportato un esempio per C#:

    class Program
    {
        static void Main(string[] args)
        {
// Breakpoint here:
             int a = 20;
         }
    }

Se si imposta un punto di interruzione nella posizione indicata nel commento, quindi si compila e si esegue il programma premendo F5, il punto di interruzione verrà raggiunto in modo normale. Se quindi si valuta il metodo Main digitando Program.Main(null) nella finestra di controllo immediato, il punto di interruzione verrà raggiunto una seconda volta e nella finestra Stack di chiamate verrà inserita una voce relativa al metodo.

Valutazione nella finestra Espressioni di controllo

Per evitare possibili effetti collaterali indesiderati, una chiamata a un metodo o a una funzione non viene valutata automaticamente ogni volta che il debugger esegue un'istruzione. È invece possibile aggiornare manualmente il risultato tramite un'apposita icona, visualizzandolo nella colonna Valore. In tal modo, è possibile valutare la chiamata manualmente. Per ulteriori informazioni, vedere Espressioni ed effetti secondari.

Identità dell'oggetto

Questa funzionalità non è disponibile per Visual Basic.

Nelle applicazioni che creano numerose istanze di una classe è spesso utile disporre di un identificatore che consenta di distinguere una determinata istanza della classe. Questo identificatore può essere utilizzato ad esempio quando il comportamento di un'istanza specifica della classe non è quello previsto oppure un'istanza specifica è stata inserita più volte in un insieme in cui dovrebbe essere presente una sola volta.

Identità di oggetti nativi

Quando si esegue il debug di codice non gestito, è possibile identificare in modo univoco un oggetto mediante il relativo indirizzo. Questa funzionalità è importante per due motivi:

  • È possibile tenere traccia di un oggetto semplicemente tramite l'indirizzo, il che consente ad esempio di utilizzare un indirizzo per:

    • Visualizzare il valore dell'oggetto in corrispondenza di tale indirizzo.

    • Verificare l'uguaglianza. Spesso l'indirizzo di un oggetto può essere utilizzato nello stesso modo della variabile oggetto.

  • È possibile utilizzare l'indirizzo di un oggetto, ossia l'istanza, per impostare un punto di interruzione su un metodo in tale istanza.

    Si supponga, ad esempio, che esista un oggetto che rappresenta un'istanza della classe CMyType e il cui indirizzo è 0xcccccccc. È possibile specificare un punto di interruzione della funzione sul metodo aMethod di tale istanza, come illustrato di seguito:

    ((CMyType *) 0xcccccccc)->aMethod

Identità di oggetti gestiti

Nel codice gestito non è possibile utilizzare l'indirizzo dell'oggetto per identificarlo. È invece possibile utilizzare un Integer positivo, noto come ID di oggetto, generato dai servizi di debug di CLR (Common Language Runtime) e associato all'oggetto. Il valore dell'ID di oggetto ha come unico scopo quello di identificare in modo univoco l'oggetto.

Gli handle dell'oggetto vengono visualizzati come interi decimali a lunghezza variabile seguiti dal simbolo di cancelletto (#) e senza zeri iniziali, ad esempio 5#. Gli handle sono riportati nella colonna Valore in varie finestre di dati del debugger.

Per creare un ID di oggetto per una variabile, fare clic con il pulsante destro del mouse sulla variabile, quindi scegliere Crea ID oggetto. Verrà visualizzato un numero seguito dal simbolo di cancelletto (#), ad esempio 123#. Per eliminare un ID di oggetto, fare clic con il pulsante destro del mouse sulla variabile, quindi scegliere Elimina ID oggetto.

Quando viene raggiunto un punto di interruzione, è possibile digitare l'handle di una variabile nella finestra Espressioni di controllo. Verrà visualizzato il valore dell'ID di oggetto, che potrà essere espanso e analizzato come qualsiasi altra variabile.

L'ID di oggetto può essere utilizzato per impostare un punto di interruzione su un metodo di un'istanza specifica. Si supponga, ad esempio, che esista un oggetto che rappresenta un'istanza della classe CMyType e il cui ID di oggetto è 5#. La classe CMyType include un metodo aMethod. È possibile impostare un punto di interruzione della funzione sul metodo aMethod dell'istanza 5#, come illustrato di seguito:

((CMyType) 5#).aMethod

È inoltre possibile utilizzare l'ID di oggetto in una condizione del punto di interruzione. Nell'esempio seguente viene illustrato come è possibile testare l'ID di oggetto in una condizione.

this == 5#

Per informazioni su come specificare una condizione del punto di interruzione, vedere Procedura: specificare una condizione del punto di interruzione.

Vedere anche

Concetti

Visualizzazione di dati nel debugger

Altre risorse

Espressioni nel debugger

Guida di orientamento al debugger