Compartir a través de


Funciones comunes del evaluador de expresiones

Este tema se aplica a:

Edición

Visual Basic

C#

F#

C++

Web Developer

Express

El tema es aplicable El tema es aplicable El tema es aplicable El tema es aplicable El tema es aplicable

Pro, Premium y Ultimate

El tema es aplicable El tema es aplicable El tema es aplicable El tema es aplicable El tema es aplicable

Este tema describe distintas características del evaluador de expresiones que son comunes al depurador, variando únicamente en el lenguaje.

Variables implícitas

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

En C# puede crear una variable implícita declarándola en el evaluador de expresiones. Por ejemplo, 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 puede declarar las variables implícitas en el evaluador de expresiones. Sin embargo, si utiliza una variable no declarada en el evaluador de expresiones de Visual Basic, se creará 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 utiliza la ventana Inmediato para evaluar un método o función de Visual Basic o C# que contiene un punto de interrupción, dicho punto de interrupción se alcanza y aparece un nuevo marco en la Pila de llamadas. A continuación se muestra un ejemplo de Visual C#:

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

Si establece un punto de interrupción en el lugar indicado por el comentario y, a continuación, compila y ejecuta el programa presionando F5, alcanzará el punto de interrupción de la manera habitual. Si, posteriormente, evalúa el método Main escribiendo Program.Main(null) en la ventana Inmediato, el punto de interrupción se alcanzará 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 le 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 sólo debe contenerla una vez.

Identidad de objeto nativo

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

  • Puede realizar el seguimiento de un objeto utilizando sólo 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 del objeto.

  • 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 siguiente manera:

    ((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 del 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 del 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 por ejemplo 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 del mouse en la variable y seleccione Crear el identificador del objeto. El depurador mostrará un número con el signo de número (#) anexado a continuación del mismo, como por ejemplo 123#. Para eliminar un identificador de objeto, haga clic con el botón secundario del mouse en la variable y seleccione Eliminar el identificador del objeto.

Al alcanzarse un punto de interrupción, 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.

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 siguiente manera:

((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#

Para obtener información acerca de cómo se especifica una condición de punto de interrupción, vea Cómo: Especificar la condición de un punto de interrupción.

Vea también

Conceptos

Ver datos en el depurador

Otros recursos

Expresiones en el depurador

Guía básica del depurador