2010-04-30 20 views
6

Considere el siguiente fragmento de código: my code http://i44.tinypic.com/28hhdw4.jpgVer valor de retorno en C#

Como se puede ver estamos en la línea 28. ¿Hay alguna manera de ver el valor de retorno de la función en este punto, sin dejar que el código volver a la función de llamada?

Foo.Bar() es una llamada a función que genera una ruta única (por ejemplo). Entonces NO es constante.

Introducción Foo.Bar() en la ventana immidiate no funciona bien, ya que vuelve a evaluar el código:?

?Foo.Bar() 
"80857466" 
?Foo.Bar() 
"2146375101" 
?Foo.Bar() 
"1106609407" 
?Foo.Bar() 
"792759112" 

En VB.NET es posible introduciendo el nombre de la función en el reloj, el cual entonces lo amenazará como una variable.

Pero en C# esto no es posible, ¿algún otro consejo?

PD: la reescritura no es una opción.

+2

yup .. simplemente seleccione el Foo.Bar() y haga clic derecho sobre él y vaya para el reloj rápido. – Malcolm

+0

@Malcolm: la vigilancia rápida se revalúa. es posible que termine con una respuesta diferente, dependiendo de lo que 'Bar()' haga –

+0

Estoy de acuerdo con usted David, pero si pone el punto de interrupción como cgreeno como funciona a continuación, funcionará. :) – Malcolm

Respuesta

3

respuesta encontrar aquí: VS get returned value in C# code?

Es realmente visible. Depurar + Otro Windows + Registros. Mire el valor de EAX (RAX en x64). El valor de tipos integrales simples se devuelve en el registro EAX. Largo en EDX: EAX. Punto flotante en STx (XMM00 en x64).

+2

Sí, pero qué sobre los objetos? – Snake

+0

Tienes razón, no ayuda mucho con los objetos. Siempre puede ir a la memoria de consulta en la dirección almacenada en ese registro, ¡pero eso no es fácil! No puedo encontrar ninguna alternativa, así que supongo que tendrías que recurrir a almacenar el resultado en una variable antes de devolverla. Consulte las respuestas a la pregunta SO vinculada para obtener un enlace donde puede pedirle a MS que haga algo al respecto. –

+0

Bien, gracias :) – Snake

2

Suponiendo que está utilizando Visual Studio, puede usar el Immediate window. Si escribe Foo.Bar(); en la ventana Inmediato obtendrás el resultado que buscas, si no quieres que reevalúe, pega un punto de quiebre en el IE de punto apropiado antes de que se evalúe por primera vez o en Foo.Bar().