¿Cómo se usa la ventana inmediata en Visual Studio?

121

La ventana inmediata es una herramienta inmensamente útil para depurar aplicaciones. Se puede utilizar para ejecutar declaraciones de código que son válidas en el contexto de un punto de ruptura e inspeccionar valores. También lo uso para escribir fragmentos de código para aprender las características del idioma.

¿Cómo se usa la ventana inmediata?

Phillip Ngan
fuente
Si se refiere a la emisión de comandos individuales de Visual Studio, eche un vistazo a [Ventana inmediata] [1] para ver ejemplos. Eso muestra cómo evaluar expresiones, ejecutar declaraciones, imprimir valores de variables, etc., a través de la ventana inmediata. [1]: msdn.microsoft.com/en-us/library/f177hahy(VS.80).aspx
TStamper
2
Hay algunos comandos especiales de los que es difícil encontrar una lista. msdn.microsoft.com/en-us/library/ms171362(v=vs.100).aspx Parte del poder de windbg está disponible. Solía ​​poder, dada una dirección, encontrar el símbolo más cercano. (ln) Creo que se apagó estúpidamente. Me encantaría tener el comando dt de windbg para mostrar los tipos en estructuras, etc. Al menos puede escribir una variable de objeto para obtener todos los miembros en una lista con sus valores. (en lugar de tratar de jugar el nodo de una apertura y cierre de un juego nodo.)
kalbr
para Visual Studio 2017, el enlace a la documentación relevante es docs.microsoft.com/en-us/visualstudio/ide/reference/…
Pac0

Respuestas:

130

Una característica interesante de la ventana Inmediato en Visual Studio es su capacidad para evaluar el valor de retorno de un método particularmente si es llamado por su código de cliente, pero es que no parte de una asignación de variables. En el modo de depuración, como se mencionó, puede interactuar con variables y ejecutar expresiones en la memoria, lo que juega un papel importante para poder hacer esto.

Por ejemplo, si tiene un método estático que devuelve la suma de dos números, como:

private static int GetSum(int a, int b)
{
    return a + b;
}

Luego, en la ventana Inmediato, puede escribir lo siguiente:

? GetSum(2, 4)
6

Como puede ver, esto funciona muy bien para métodos estáticos. Sin embargo, si el método no es estático, debe interactuar con una referencia al objeto al que pertenece el método.

Por ejemplo, digamos que así es como se ve su clase:

private class Foo
{
    public string GetMessage()
    {
        return "hello";
    }
}

Si el objeto ya existe en la memoria y está dentro del alcance, entonces puede llamarlo en la Ventana Inmediata siempre que haya sido instanciado antes de su punto de interrupción actual (o, al menos, antes donde el código esté en pausa en modo de depuración):

? foo.GetMessage(); // object ‘foo’ already exists
"hello"

Además, si desea interactuar y probar el método directamente sin depender de una instancia existente en la memoria, puede crear una instancia de su propia instancia en la ventana Inmediato:

? Foo foo = new Foo(); // new instance of ‘Foo’
{temp.Program.Foo}
? foo.GetMessage()
"hello"

Puede ir un paso más allá y asignar temporalmente los resultados del método a variables si desea hacer más evaluaciones, cálculos, etc.

? string msg = foo.GetMessage();
"hello"
? msg + " there!"
"hello there!"

Además, si ni siquiera desea declarar un nombre de variable para un nuevo objeto y solo desea ejecutar uno de sus métodos / funciones, haga esto:

? new Foo().GetMessage()
"hello" 

Una forma muy común de ver el valor de un método es seleccionar el nombre del método de una clase y hacer un 'Agregar inspección' para que pueda ver su valor actual en la ventana Inspección. Sin embargo, una vez más, es necesario crear una instancia del objeto y tener el alcance para que se muestre un valor válido. Esto es mucho menos poderoso y más restrictivo que usar la Ventana Inmediata.

Junto con los métodos de inspección, puede hacer ecuaciones matemáticas simples:

? 5 * 6
30

o comparar valores:

? 5==6
false
? 6==6
true

El signo de interrogación ('?') No es necesario si está directamente en la ventana Inmediato, pero se incluye aquí para mayor claridad (para distinguir entre las expresiones escritas y los resultados). Sin embargo, si está en la ventana de comandos y necesita para hacer algunas cosas rápidas en la ventana Inmediato y luego preceda sus declaraciones con '?' y listo.

Intellisense funciona en la ventana Inmediato , pero a veces puede ser un poco inconsistente. En mi experiencia, parece que solo está disponible en el modo de depuración, pero no en el modo de diseño, sin depuración.

Desafortunadamente, otro inconveniente de la ventana inmediata es que no admite bucles.

Rayo
fuente
1
¿Cómo encuentras la ventana inmediata?
jpaugh
1
Ctrl + Alt + Io Depurar -> Windows -> Inmediato
Ray
11

Utilice la ventana Inmediato para ejecutar comandos

La ventana inmediata también se puede utilizar para ejecutar comandos. Simplemente escriba a >seguido del comando.

ingrese la descripción de la imagen aquí

Por ejemplo >shell cmd, iniciará un shell de comandos (esto puede ser útil para verificar qué variables de entorno se pasaron a Visual Studio, por ejemplo). >clsborrará la pantalla.

Aquí hay una lista de comandos que se usan con tanta frecuencia que tienen sus propios alias: https://msdn.microsoft.com/en-us/library/c3a0kd3x.aspx

CJBS
fuente
2
buen consejo. De hecho, esto combina muy bien con otro truco que uso: >open Filenameabrirá el archivo seleccionado en la solución e incluso completará el nombre del archivo.
Phillip Ngan
6

La ventana Inmediato se utiliza para depurar y evaluar expresiones, ejecutar declaraciones, imprimir valores de variables, etc. Le permite ingresar expresiones para ser evaluadas o ejecutadas por el lenguaje de desarrollo durante la depuración.

Para mostrar la ventana Inmediato, elija Depurar> Ventanas> Inmediato o presione Ctrl-Alt-I

ingrese la descripción de la imagen aquí

Aquí hay un ejemplo con la ventana inmediata:

int Sum(int x, int y) { return (x + y);}
void main(){
int a, b, c;
a = 5;
b = 7;
c = Sum(a, b);
char temp = getchar();}

agregar punto de interrupción

ingrese la descripción de la imagen aquí

comandos de llamada

ingrese la descripción de la imagen aquí

https://msdn.microsoft.com/en-us/library/f177hahy.aspx

Isma Rekathakusuma
fuente