2009-11-09 13 views
16

¿Es posible obtener el valor de retorno de un método en el depurador de Visual Studio, incluso si ese valor no se asigna a una variable local? Por ejemplo, estoy depurar el siguiente código:Obtención de un Método Valor de retorno en el depurador de VS

public string Foo(int valueIn) 
{ 
    if (valueIn > 100) 
     return Proxy.Bar(valueIn); 
    else 
     return "Not enough"; 
} 

ya que no estoy estableciendo las variables locales en Foo, y suponiendo que no estoy estableciendo un punto de quiebre en lo que sea que está llamando Foo, ¿hay una manera de ¿Cuál es el valor de retorno si tengo un punto de interrupción dentro de Foo (o de otra manera)? No tengo mucha experiencia con los Autos o las ventanas Intermedias, así que no estoy seguro si esas son incluso una opción válida o no.

+0

Ver también [esta pregunta] (http://stackoverflow.com/questions/268048/can-i-find-out-the-return-value-before-returning-while-debugging-in-visual-studio) –

+3

[Esta característica es nueva en VS2013] (http://blogs.msdn.com/b/visualstudioalm/archive/2013/06/27/seeing-function-return-values-in-the-debugger-in-visual- studio-2013.aspx). – shambulator

+0

[Esto] (http: // stackoverflow.com/preguntas/268048/CAN-i-find-fuera-del-retorno-valor-antes de regresar-mientras-depuración-en-visual-Studi) pregunta también puede ayudar. – RBT

Respuesta

6

se puede establecer un punto de interrupción en Foo, abra la ventana inmediata y ejecute el siguiente comando:

? Foo(valueIn) 

Esto imprimirá el valor de retorno en la ventana Inmediato.

También puede copiar la expresión y pegarla en la ventana Inspección, aunque solo lo haría si estoy seguro de que la llamada no tiene efectos secundarios (de lo contrario, puede obtener resultados confusos).

+12

Esto ejecutará la función nuevamente, lo cual no es necesariamente una buena idea. Usando – SLaks

+0

$ ReturnValue' Visual Studio variables 'depurador en la ventana-reloj rápido o ventana inmediata es mucho mejor y ni idea de riesgo. Tener un [aquí] mirada (http://stackoverflow.com/questions/268048/can-i-find-out-the-return-value-before-returning-while-debugging-in-visual-studi) – RBT

2

No, no sé de una manera de hacer esto. Me gustaría poner un punto de interrupción en la persona que llama y mirar el valor de retorno allí.

5

Siempre se puede cambiar a la vista desensamblador y paso a través de las instrucciones individuales. El valor de retorno estará en @eax (o @rax) justo antes de ejecutar la instrucción 'ret'.

+0

... ¡O después de eso! P.ej. después de presionar F10/Shift-F11/el cursor vuelve a la función principal. Esto es bueno al devolver un tipo de valor. El problema es que el valor puede ser un puntero que es inútil sin desreferenciar. –

2

También puede resaltar cualquier expresión en el depurador y haga clic derecho -> reloj rápido. Eso ejecutará la expresión (suponiendo que sea válida) y le dará el valor.

0

Siempre puede usar su caja de reloj para evaluar las llamadas a funciones.

Foo (valueIn);

esto sólo funcionará si su Proxy.Bar (VALUEIN) es independiente del tiempo sin embargo.

+0

La palabra lo que estás buscando es idempotente. – SLaks

0

Una solución es utilizar una variable de resultado al estilo de Pascal:

public string Foo(int valueIn) 
{ 
    string result; 
    if (valueIn > 100) 
     result = Proxy.Bar(valueIn); 
    else 
     result = "Not enough"; 
    return result; 
} 

Este es un buen estilo en mi opinión para deja de funcionar. Para los muy cortos, como el anterior, podría considerarse excesivo, pero soluciona el problema del depurador.

0

La respuesta a una pregunta similar: En VS 2013, puede agregar la variable $ ReturnValue al reloj. Contiene el valor de retorno real de la función.

Gracias a Jesper Jensen.

Cuestiones relacionadas