Compartir a través de


Características comunes del evaluador de expresiones

Este tema se describen diversas características del evaluador de expresiones que son comunes al depurador, y que varían únicamente según el lenguaje.

Variables implícitas

En Visual Basic y C#, se pueden crear variables implícitas mediante el evaluador de expresiones. Estas variables implícitas nunca están fuera del ámbito y se pueden tratar como cualquier otra variable.

En C#, se puede crear una variable implícita declarándola en el evaluador de expresiones. Por ejemplo, se puede escribir el siguiente código de C# en la ventana Inmediato:

int b = 100;

Cuando se ejecuta este código en la ventana Inmediato, la nueva variable implícita aparece en la ventana Variables locales con el signo $ delante del nombre de la variable, en este caso $b.

En Visual Basic no se pueden declarar variables implícitas en el evaluador de expresiones. Sin embargo, si se utiliza una variable no declarada en el evaluador de expresiones de Visual Basic, se crea automáticamente una variable implícita. En Visual Basic, las variables implícitas no se muestran en la ventana Variables locales.

Puntos de interrupción

Si se utiliza la ventana Inmediato para evaluar un método o una función de Visual Basic o de C# que contiene un punto de interrupción, se visita dicho punto de interrupción y aparece un nuevo marco en la Pila de llamadas. A continuación se muestra un ejemplo de C#:

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

Si se establece un punto de interrupción en el lugar indicado por el comentario y, a continuación, se compila y ejecuta el programa presionando F5, se visitará el punto de interrupción de la manera habitual. Si ahora se evalúa el método Main escribiendo Program.Main(null) en la ventana Inmediato, el punto de interrupción se visitará por segunda vez y se generará una entrada para el método en la Pila de llamadas.

Evaluar en la ventana Inspección

Para evitar posibles efectos secundarios no deseados, la llamada a una función o a un método no se evalúa automáticamente cada vez que el depurador avanza. En su lugar, un icono permite actualizar manualmente el resultado. Aparece en la columna Valor. Esto permite evaluar la llamada manualmente. Para obtener más información, vea Expresiones y efectos secundarios.

Identidad de objetos

Esta característica no está disponible en Visual Basic.

Algunas aplicaciones crean muchas instancias de una clase. En estas aplicaciones, suele ser útil tener un identificador para distinguir una instancia determinada de la clase. Esto puede ser útil, por ejemplo, si una instancia específica de la clase no se comporta de la manera prevista o si se ha insertado una instancia específica más de una vez en una colección que solo debe contenerla una vez.

Identidad de objeto nativo

Cuando se depura código no administrado, se puede identificar de forma única un objeto por medio de su dirección. Esto es importante por dos motivos:

  • Se puede realizar el seguimiento de un objeto utilizando solo su dirección. Esto incluye la posibilidad de utilizar una dirección para:

    • Ver el valor del objeto en esa dirección.

    • Comprobar la igualdad. Normalmente, la dirección de un objeto se puede utilizar de la misma manera que la propia variable de objeto.

  • Se puede utilizar la dirección de un objeto, la instancia, para establecer un punto de interrupción en un método en esa instancia concreta.

    Por ejemplo, suponga que tiene un objeto que es una instancia de la clase CMyType, con la dirección 0xcccccccc. Puede especificar un punto de interrupción de función en el método aMethod de esa instancia de la manera siguiente:

    ((CMyType *) 0xcccccccc)->aMethod

Identidad de objeto administrado

Con código administrado, no se puede utilizar la dirección de un objeto para identificarlo. En su lugar, se debe utilizar un entero conocido como identificador de objeto generado por los servicios de depuración de Common Language Runtime (CLR) y asociado al objeto. Este número es un entero positivo generado por los servicios de depuración de CLR. El valor del identificador de objeto no tiene gran importancia excepto para identificar el objeto de forma única.

Los identificadores de objetos se muestran como enteros decimales de longitud variable, con el signo de número (#) anexado tras el número, sin ceros iniciales, como 5#. Los identificadores aparecen en la columna Valor en diferentes ventanas de datos del depurador.

Para crear un identificador de objeto para una variable, haga clic con el botón secundario en la variable y seleccione Crear el identificador del objeto. El depurador mostrará un número con el signo de almohadilla (#) anexado a continuación del mismo, como 123#. Para eliminar un identificador de objeto, haga clic con el botón secundario en la variable y seleccione Eliminar el identificador del objeto.

Cuando se visita un punto de interrupción, se puede escribir el identificador de una variable en la ventana Inspección. El depurador muestra el valor del identificador de objeto y lo puede expandir e inspeccionar como cualquier otra variable.

Se puede utilizar el identificador de objeto para establecer un punto de interrupción en un método de una instancia específica. Por ejemplo, suponga que tiene un objeto que es una instancia de la clase CMyType y la instancia tiene un identificador de objeto 5#. La clase CMyType incluye un método aMethod. Puede establecer un punto de interrupción de función en el método aMethod de la instancia 5# de la manera siguiente:

((CMyType) 5#).aMethod

También puede utilizar el identificador de objeto en una condición de punto de interrupción. En el ejemplo siguiente se muestra cómo se puede comprobar el identificador de objeto en una condición.

this == 5#

Vea también

Conceptos

Ver datos en el depurador

Puntos de interrupción: Usar números de llamadas, funciones de pila de llamadas y condiciones para realizar interrupciones cuando y donde quiera en el depurador de Visual Studio

Otros recursos

Expresiones en el depurador

Guía básica del depurador