¿Es posible ver el valor de retorno de un método después de ejecutar la línea y antes de que el puntero de instrucción regrese a la función que llama?
Estoy depurando un código que no puedo modificar (léase: no quiero volver a compilar una biblioteca de terceros) y, a veces, salta al código para el que no tengo fuente o la expresión de retorno tiene efectos secundarios que me impiden ser capaz de ejecutar la expresión en la pestaña Visualización .
A menudo, el valor de retorno se usa en una declaración compuesta, por lo que la vista de Variables nunca me mostrará el valor (por lo tanto, quiero ver el resultado antes de que el control regrese a la función de llamada).
ACTUALIZACIÓN: No puedo usar el visor de expresiones ya que hay efectos secundarios en la declaración.
fuente
Respuestas:
Esta función se agregó a la versión 4.7 M2 de Eclipse bajo el error 40912 de Eclipse .
Para usarlo:
return
declaración (utilizando "Paso sobre" o "Paso hacia atrás ")Consulte Eclipse Project Oxygen (4.7) M2 - Nuevo y notable para obtener más detalles.
fuente
Encontré un atajo realmente bueno para esto. Seleccione la expresión que devuelve el valor y presione
Esto mostrará el valor de la declaración de devolución. Esto es realmente útil en los casos en los que no puede o no desea cambiar solo con fines de depuración.
Espero que esto ayude.
Nota: No he probado esto con bibliotecas de terceros, pero funciona bien para mi código. Probé esto en Eclipse Java EE IDE para desarrolladores web. Versión: Juno Service Release 1
fuente
Ctrl + Shift + I
también fue útil para mí.return System.currentTimeMillis();
, obtendría un resultado diferente al que la función realmente devolvió.Apple machine
?Este es en realidad un error de larga data en Eclipse, que se remonta a los primeros días del IDE: https://bugs.eclipse.org/bugs/show_bug.cgi?id=40912
fuente
Es por eso que siempre me quedo con el siguiente patrón de métodos:
Mis reglas:
Naturalmente, los captadores más triviales están exentos.
fuente
También tengo curiosidad por conocer la respuesta a esta pregunta.
En el pasado, cuando trataba con una biblioteca de terceros como esa, lo que hacía era crear una clase contenedora o una clase secundaria que delegaba en la clase principal y realizaba mi depuración en la clase contenedora / secundaria. Sin embargo, requiere un trabajo extra.
fuente
"Ahora, cuando regresa de un método, en el método superior, en la vista de variables se muestra el valor de retorno de la llamada finalizada anteriormente" [1]
[1] https://coffeeorientedprogramming.wordpress.com/2016/09/23/eclipse-see-return-value-during-debugging/
fuente
Una dificil. Mi experiencia, fuera de Eclipse, es que si necesita ver el valor de retorno, es mejor asignarlo a una variable local en la función para que la declaración de retorno sea simple
return varname;
y noreturn(some * expression || other);
. Sin embargo, eso no es tremendamente útil para usted ya que dice que no puede (o no quiere) modificar o incluso recompilar el código. Entonces, no tengo una buena respuesta para usted, tal vez deba reconsiderar su requisito.fuente
Dependiendo de la declaración de devolución, puede resaltar la expresión que se está devolviendo y, en el menú del botón derecho, debería haber algo como "evaluar expresión" (no tengo eclipse frente a mí ahora, pero es algo así ). Le mostrará lo que se le devolverá.
fuente
Esto es un poco exagerado, pero como no parece haber una forma sencilla:
Puede usar AspectJ para instrumentar el JAR con aspectos que se apoderan del valor de retorno de los métodos que le interesan. De acuerdo con la documentación de Eclipse, los programas de AspectJ se pueden depurar como otros programas.
Hay dos opciones para tejer tus clases sin volver a compilar la biblioteca:
Tejido posterior a la compilación si el procesamiento del JAR binario es aceptable;
Tejido en tiempo de carga, que requiere la activación de un agente de tejido en la VM.
Consulte la documentación de eclipse (enlace anterior) y también la Guía del entorno de desarrollo de AspectJ .
fuente