¿Puedo averiguar el valor de retorno antes de regresar mientras hago la depuración en Eclipse?

StackOverflow https://stackoverflow.com/questions/217116

Pregunta

¿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. No puedo modificar (lea: no quiero volver a compilar una biblioteca de terceros) y, a veces, salta al código que no tengo fuente o La expresión de retorno tiene efectos secundarios que me impiden ejecutar la expresión en la pestaña Mostrar .

A menudo, el valor de retorno se usa en una declaración compuesta, por lo que la vista Variables nunca me mostrará el valor (por lo tanto, desear ver el resultado antes de que el control vuelva a la función de llamada).

ACTUALIZACIÓN: no puedo usar el visor de expresiones porque hay efectos secundarios en la declaración.

¿Fue útil?

Solución

Esta función se agregó a Eclipse versión 4.7 M2 en error Eclipse 40912 .

Para usarlo:

  • pase sobre la declaración de return (usando " Step Over " o " Step Return ")
  • ahora la primera línea en la vista de variables mostrará el resultado de la declaración de retorno, como " [instrucción xxx] devolvió: "

Consulte Eclipse Project Oxygen (4.7) M2 - Nuevo y notable para más detalles.

Otros consejos

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

Ctrl + Shift + D

Esto mostrará el valor de la declaración de retorno. Esto es realmente útil en los casos en los que no puede o no desea 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

Este es realmente 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

Por eso siempre me atengo al 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 declaración de devolución, solo al final del método (finalmente se permite después de ella)
  2. Siempre tenga un resultado llamado local que retenga el valor devuelto, comenzando desde un valor predeterminado.

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

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 de contenedor o una clase de niño que delegue a la clase de padre y hacer mi depuración en la clase de contenedor / hijo. Sin embargo, se necesita trabajo extra.

" Ahora, cuando regresa de un método, en el método superior, en la vista de variables, 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/

Una dura. 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 un simple return varname; y no return (alguna * expresión || otra); . Sin embargo, eso no es terriblemente útil para usted ya que dice que no puede (o no quiere) modificar o incluso compilar el código. Por lo tanto, no tengo una buena respuesta para usted, tal vez necesite reconsiderar su requerimiento.

Dependiendo de la declaración de retorno, puede resaltar la expresión que se está devolviendo y desde el menú del botón derecho, debería haber algo como " evaluar expresión " (No tengo eclipse delante de mí ahora, pero es algo así). Le mostrará lo que va a ser devuelto.

Esto es un poco inverosímil, pero como parece que no hay una forma simple:

Puede usar AspectJ para instrumentar el JAR con aspectos que retienen el valor de retorno de los métodos que le interesan. Según la documentación de Eclipse, los programas de AspectJ pueden ser debugged 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 de tiempo de carga, que requiere activar un agente de tejido en la máquina virtual.

Consulte la documentación de eclipse (enlace de arriba) y también la Desarrollo de AspectJ Guía de medio ambiente .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top