visual tutorial temas studio para mejores las iconos fuente extensiones español configurar code cambiar visual-studio debugging

visual-studio - tutorial - visual studio code español



VIsual Studio-¿Cómo cambiar el valor de retorno de un método en el depurador? (6)

¿Por qué quiere cambiar el valor de retorno en el método llamado? Puede cambiarlo fácilmente sobre la marcha en el método de llamada. Tan pronto como regrese su función, obtendrá el valor devuelto y allí puede cambiarlo.

private int myMethod_1() { return 12; } //call would be something like this int x = myMethod_1(); //Here you can change the value after the execution of the above line.

Incluso si no está almacenando el valor de retorno en una variable, y lo está pasando directamente a algún otro método, incluso entonces puede cambiar el valor ingresando en ese método y cambiando el valor del argumento allí. ¿Me estoy perdiendo de algo?

Cuando estoy depurando, a menudo tengo que lidiar con métodos que no usan una variable intermedia para almacenar el valor de retorno:

private int myMethod_1() { return 12; } private int myMethod_2() { return someCall( someValue ); }

Bueno, para recrear un error, a menudo tengo que cambiar los valores sobre la marcha. Aquí, podría querer ver qué sucede cuando myMethode_1 devuelve cero. Lo mismo para myMethod_2 .

¿Hay alguna manera de hacerlo sin modificar el código ? Lo que me gustaría hacer es colocar un punto de interrupción en la línea de retorno (o en el corchete de cierre) y escribir un nuevo valor de retorno.

Nota: estoy usando Visual Studio 2005 y Visual Studio 2008.

Gracias !


Creo que puedes hacerlo en Visual Studio pero eso me parece sucio.

Mis pensamientos son que realmente deberías buscar en un marco de prueba de unidades y burlas para que puedas simular el resultado de myMethod_2 como un 0 y ver qué efecto tiene en tu código. IMO. De esta forma, puede dejar la verificación de retorno 0 en la prueba de unidad para asegurarse de que el error feo no vuelva a asomar la cabeza.


Lo que necesitas es Burlarse. Procesamiento de marcos de burla como Rhinomock, Moq o Typemock.

Para el tipo de escenario que está describiendo, voy a asumir que es posible que no tenga un desarrollo limpio impulsado por contrato y que deba regresar en un comportamiento / estado falso. En este caso, Typemock puede ser la mejor opción para ti aunque sea comercial


Los valores devueltos de las funciones generalmente se devuelven en el registro EAX.

Si establece un punto de interrupción justo al final de la función, existe la posibilidad de que cambiar EAX cambie el valor de retorno. Puede cambiar y ver cualquier registro en Visual Studio simplemente escribiendo su nombre en la ventana del reloj.
Es probable que esto falle si tiene activada la optimización o incluso si la función es algo simple como return 12 . probablemente tampoco funcionará si devuelve algo que no cabe en un registro de 32 bits. Por lo menos, vale la pena intentarlo.


No lo creo
Necesitará tener una var temporal en el llamado o la persona que llama para poder controlar el valor para modificarlo en la ventana IDE Debugger / QuickWatch. Por lo tanto, la forma más simple y rápida de hacerlo sería comentar el código existente y realizar un cambio temporal para depurar-qué-si.

ya sea

private int myMethod_1() { var x = 12; return x; }

O

private int myMethod_2() { var y = someCall( someValue); return y; }

No veo que valga la pena el agravante de "evitar un cambio de código" para hacer esto. Si soy FUBAR, hago un pago y somos oro nuevamente.


Para aquellos que buscan una solución a esto en VB.NET:

Era tan simple, que no puedo creer que no lo haya visto: para ver el valor, volverá una función: simplemente coloque el puntero sobre el nombre de la función. El valor se mostrará en una información sobre herramientas.

Cambiar el valor: simplemente haga clic en este consejo, cambie el valor y presione enter.

Visual Studio es genial!

Nota: Lo probé en VB.NET en Visual Studio Team System 2008. Solo intenté usar C #, pero no funciona ... :-(