Tome la siguiente función:
DataTable go() {
return someTableAdapter.getSomeData();
}
Cuando establezco un punto de interrupción en esta función, ¿existe la posibilidad de inspeccionar el valor devuelto? go()
está directamente acoplado a una cuadrícula de datos en una .aspx
página.
La única forma de inspeccionar la tabla de datos devuelta es usar una variable temporal. Sin embargo, eso es un poco incómodo. ¿No hay otra manera?
c#
visual-studio
visual-studio-debugging
Doekman
fuente
fuente
Respuestas:
No que yo sepa. Tenga en cuenta que si haces agregar una variable, que conseguirá eliminado por el compilador en las versiones de lanzamiento de todos modos ...
Actualización: esta funcionalidad se ha agregado a VS2013 . Puede ver los valores de retorno en las ventanas de autos o usar
$ReturnValue
en la ventana de vigilancia / inmediata.El valor solo se puede ver directamente después de regresar de la función, por lo tanto, la forma más fácil de acceder es poner un punto de interrupción en la llamada a la función y pasar (F10) la llamada.
Actualización para VS2015: ¡boo! desafortunadamente, no parece estar en la actualización VS2015 (devenv v14)
para VS2017: está de vuelta. (devenv v15)
fuente
Esto se puede hacer en Visual Studio 2013 con CLR 4.5.1 de acuerdo con el sitio de comentarios del cliente . No estaba disponible en versiones anteriores para C #.
(Visual Studio 2008 y versiones anteriores lo admitían para VB.NET. Siempre estuvo disponible para los desarrolladores de C / C ++).
fuente
Estoy de acuerdo en que es algo muy útil: no solo ver el valor de retorno del método antes de abandonarlo, sino también ver el valor de retorno de los métodos que acabo de pasar. Lo implementé como parte de una extensión comercial de Visual Studio llamada " OzCode ".
Con él, puede ver los valores de retorno del método directamente en el editor de código, como una especie de pantalla HUD:
Para obtener más información, vea este video .
fuente
Según Microsoft, no hay forma de implementar esto de manera confiable con código administrado. Este es un problema del que conocen y están trabajando:
https://connect.microsoft.com/VisualStudio/feedback/details/597933/add-a-return-pseudo-variable-to-the-visual-studio-debugger-for-net-code
fuente
Con respecto a Visual Studio 2015:
Según la respuesta actualmente aceptada por Marc Gravell:
Esa respuesta también indicó que esta funcionalidad no funciona en Visual Studio 2015. Esto no es (del todo) verdadero. En Examinar los valores de retorno de las llamadas a métodos hay la siguiente nota:
Probé esto en Visual Studio 2015 Enterprise:
fuente
$ReturnValue
funciona. Sin embargo, el valor de retorno no aparece en ningún lado si tieneUse managed compatibility mode
habilitada la opción de depuración.Si va al menú Herramientas → Opciones , IntelliTrace, y cambia la configuración para recopilar eventos e información de llamadas.
Puede volver al evento de llamada anterior ( Ctrl+ Shift+ F11) y ver el valor temporal devuelto por la llamada al método en la ventana de autos como elemento secundario del nombre del método.
Esto no le muestra el valor de retorno para el método en el que se encuentra. Simplemente le muestra el valor de retorno del último método llamado en el método actual.
Entonces, está bien para
como le muestra el valor de retorno para
someTableAdapter.getSomeData()
.Pero no para:
fuente
Viejo truco de los días anteriores a .NET: abra la ventana Registros y observe el valor del registro EAX. Contiene el valor de retorno de la última función llamada.
fuente
Salga del método go () usando Shift-F11, y luego en la ventana de depuración "Autos" mostrará el valor de retorno de la llamada al método que acaba de salir de la pila (en este caso, el método go () que es Lo que quieras). Este es el comportamiento en Visual Studio 2005; No he usado Visual Studio 2008, así que no sé si esto se comporta de la misma manera en esa versión.
fuente
Sí, hay una muy buena manera. Un inconveniente importante es que tendrías que esperar 5, quizás 6 años. Desde que vi que publicaste en noviembre de 2008, te sugiero que waaaaaa ...
... aaaait. ¡Y voilá! Solo para usted, MS ha lanzado la última versión de Visual Studio 2013, donde es una característica predeterminada accesible desde los menús mientras se ejecuta en modo de depuración (menú Depurar → Windows → Autos ).
fuente
Hay muchas soluciones alternativas, pero ninguna parece satisfactoria.
Para citar a John Skeet a continuación (comentar una respuesta ahora eliminada):
En teoría, el depurador podría tener una
return
variable. Después de todo: es solo una variable en la pila:Considere esto una solicitud de función para Visual Studio.
fuente
Quería ampliar la respuesta de PascalK para que esto funcione en Visual Studio 2015, porque hay una característica oculta que no está documentada en Examinar valores de retorno de llamadas a métodos .
Si ha anidado llamadas a funciones, las pseudovariables
$ResultValueX
se crean automáticamente, donde la X se refiere al orden de las llamadas a funciones. Entonces, si tiene una llamada comoMultiply(Five(), Six())
, se crean las siguientes pseudovariables:fuente
Microsoft Visual C ++ solía hacer esto, pero Visual Studio no AFAIK .. :(
fuente
La única manera que sé es colocar un punto de interrupción en la línea de retorno y luego llamar a la ventana Quick Watch e ingresar la expresión devuelta:
Pero esto solo funciona si la llamada no cambia el estado de ningún objeto (ya que habrá una segunda llamada al mismo método cuando reanude la ejecución).
fuente
También puede solicitar evaluar el valor en la ventana intermedia, si no establece indicadores u otras variables, sino que solo devuelve algo.
fuente
Creo que puede determinar esto mirando el registro RAX en la ventana Registros (Depuración / Windows / Registros). Después de salir (SHIFT + F11) de la función, verifique el registro RAX. No lo sé con certeza, pero una vez en la luna, podría verificar un registro (antes de los días .NET) y ver el valor de retorno allí. Incluso podría ser una combinación de RAX y RBX, etc.
fuente
Abrir la ventana Debug → Autos te cierra. No mostrará el valor de retorno real, pero mostrará lo que se evaluó en la declaración de retorno.
fuente
return x + y;
Lo que quise decir es que si establece un punto de interrupción en esta línea, su ventana Debug-Autos mostrará los valores actuales para x e y. Como dije, solo te acerca. Solo trato de ser útil. No creo que merezca un voto negativo.Sí, cambiando a VB.NET. ; P (Acabas de decir "Visual Studio".;)
Desde que tengo memoria (desde Visual Basic hasta todas las versiones de VB.NET), simplemente puede consultar el nombre de la función. "Funciona" como una variable local que se declara implícitamente al comienzo de la función y su valor actual también se usa como valor de retorno cuando la función sale a través de medios de declaración de no retorno (es decir,
Exit Function
o simplemente cayendo) y, por supuesto, cuando Se utiliza la declaración de devolución.También se establece en la expresión de la declaración de devolución. Al igual que una variable local, su valor se puede inspeccionar en cualquier punto de ejecución dentro de la función (incluso después de que se ejecute la instrucción return). C # no tiene esto y debería.
Esa pequeña característica de VB.NET (más la
Exit Function
declaración que habilita, otra característica que C # no tiene y debería) es muy útil en una forma de programación defensiva que practico donde siempre inicializo el nombre de la función al valor de falla / predeterminado como el primera declaración Luego, en cualquier punto de falla (que normalmente ocurre con mucha más frecuencia que los puntos de éxito), simplemente puedo llamar a laExit Function
declaración (es decir, sin tener que duplicar la expresión de falla / predeterminada o incluso un nombre constante / variable).fuente
La respuesta aceptada no funciona correctamente con Visual Studio 2015, pero al colocar un punto de interrupción en la última línea del método y presionar F10, colocará todas las expresiones del valor de retorno en la ventana local.
fuente
Puede intentar seleccionar
"someTableAdapter.getSomeData();"
, hacer clic derecho sobre él e ir a Quick Watch .fuente
Arrastre y suelte la expresión de retorno en una ventana de observación.
Por ejemplo, en la declaración
arrastrar y soltar
en una ventana de observación y verás el valor.
Puedes hacer esto para cualquier expresión.
fuente