valores retorna metodos metodo mandar llamar funciones definicion como c# visual-studio debugging

retorna - metodos y funciones en c#



Obtener el valor de retorno de un método en el depurador VS (8)

¿Es posible obtener el valor de retorno de un método en el depurador de Visual Studio, incluso si ese valor no está asignado a una variable local? Por ejemplo, estoy depurando el siguiente código:

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

Ya que no estoy configurando ninguna variable local en Foo, y asumiendo que no estoy estableciendo un punto de interrupción en lo que se llama Foo, ¿hay una manera de ver cuál es el valor de retorno si tengo un punto de interrupción dentro de Foo (u otra manera )? No tengo mucha experiencia con las ventanas de Autos o Intermedio, por lo que no estoy seguro de si son una opción válida o no.


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

Crédito a Jesper Jensen.


No, no conozco una manera de hacer esto. Pondría un punto de interrupción en la persona que llama y miraría el valor de retorno allí.


Puede establecer un punto de interrupción en Foo, abrir la ventana inmediata y ejecutar el siguiente comando:

? Foo(valueIn)

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

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


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


Siempre puede utilizar su caja de observación para evaluar llamadas de función.

Foo (valueIn);

Esto solo funcionará si su Proxy.Bar (valueIn) es independiente del tiempo.


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


Una solución es usar 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 funciones más largas. Para los más cortos, como el anterior, podría considerarse excesivo, pero soluciona el problema del depurador.