¿Puedo averiguar el valor de retorno antes de volver mientras estoy depurando en Eclipse?

¿Es posible ver el valor de retorno de un método después de que se haya ejecutado la línea y antes de que el puntero de instrucción regrese a la función de llamada?

Estoy depurando el código que no puedo modificar (léase: no quiero volver a comstackr una biblioteca de terceros) , y algunas veces salta al código No tengo fuente o la expresión de retorno tiene efectos secundarios que me impiden ser capaz de ejecutar solo la expresión en la pestaña Pantalla .

A menudo, el valor de retorno se utiliza en una statement 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 statement.

Esta característica se agregó a Eclipse versión 4.7 M2 en Eclipse error 40912 .

Encontré un buen atajo para esto. Seleccione la expresión que devuelve el valor y presione

Ctrl + Shift + D 

Esto mostrará el valor de la statement de devolución. Esto es realmente útil en casos en los que no puede o no quiere cambiar solo para fines de depuración.

Espero que esto ayude.

Nota: No he probado esto con bibliotecas de terceros, pero está funcionando bien para mi código. Probado esto en Eclipse Java EE IDE para desarrolladores web. Versión: Juno Service Release 1

Es por eso que siempre me quedo con el siguiente patrón de métodos:

 MyReturnedType foo() { MyReturnedType result = null; // do your stuff, modify the result or not return result; } 

Mis reglas:

  1. Solo una statement de devolución, solo al final del método (finalmente permitido después)
  2. Siempre tenga un resultado llamado local que contenga el valor devuelto, comenzando desde un valor predeterminado.

Naturalmente, los captadores más triviales están exentos.

Este es en realidad un error de larga data en Eclipse, que data de los primeros días del IDE: https://bugs.eclipse.org/bugs/show_bug.cgi?id=40912

Tengo curiosidad por aprender la respuesta a esta pregunta también.

En el pasado, al tratar con una biblioteca de terceros como esa, lo que hice fue crear una clase contenedora o clase secundaria que delegaría en la clase principal y realizar mi depuración en la clase contenedora / secundaria. Sin embargo, toma trabajo extra.

Dependiendo de la statement de devolución, puede resaltar la expresión que se está devolviendo y desde el menú contextual, debería haber algo como “evaluar expresión” (no tengo eclipse ahora, pero es algo así ) Le mostrará lo que se va a devolver.

Una dificil. Mi experiencia, fuera de Eclipse, es que si necesita ver el valor de retorno, lo mejor es asignarlo a una variable local en la función para que la statement de retorno sea un nombre de return varname; simple return varname; y no return(some * expression || other); . Sin embargo, eso no es tremendamente útil para ti, ya que dices que no puedes (o no quieres) modificar o incluso recomstackr el código. Por lo tanto, no tengo una buena respuesta para usted, quizás deba reconsiderar su requisito.

Esto es un poco exagerado, pero como no parece ser una manera simple:

Puede usar AspectJ para instrumentar el JAR con aspectos que consigan el valor de retorno de los métodos que le interesan. Según la documentación de Eclipse, los progtwigs de AspectJ se pueden depurar como otros progtwigs.

Hay dos opciones para tejer sus clases sin volver a comstackr la biblioteca:

  • Tejido posterior a la comstackción si se acepta procesar el JAR binario;

  • Tejido en tiempo de carga, que requiere activar un agente de tejido en la máquina virtual.

Consulte la documentación de eclipse (enlace arriba) y también la Guía de entorno de desarrollo de AspectJ .