¿Puedo averiguar el valor de retorno antes de regresar mientras se depura en Intellij?

127

Con:

Object method(){
    ...
    return /* some complex expression */
}

¿Hay alguna manera de ver qué valor se devolverá durante la depuración? ¿De alguna manera establece un punto de interrupción que se alcanzaría justo después del regreso, pero antes de que la ejecución vaya al código de llamada? Me gustaría poder saber cuál es el valor de retorno y también poder ver qué valores de todas las variables locales son.

La manera de hacerlo es ahora haciendo una variable temporal: Object ret = /* something complex */; return ret;. Pero eso es una molestia y también agrega una línea de código innecesaria adicional.

Nota: Esta es la misma pregunta que ¿Puedo averiguar el valor de retorno antes de regresar mientras se depura en Visual Studio , pero para intellij.

Kyle
fuente

Respuestas:

31

Parece que hay un par de formas en que puedes hacer esto. El primero implica configurar el punto de interrupción en la firma del método, en su caso, configuraría un punto de interrupción en el método Object () {. Esto le permitirá observar la entrada y salida del método. Creo que debe usar esto junto con los " valores de retorno del método Watch" como se indicó anteriormente, pero no he podido probarlo completamente, ya que toma demasiado tiempo calcularlo. Tenga cuidado, esto disminuye drásticamente el rendimiento del depurador y llevará más tiempo depurarlo.

También puede hacer lo siguiente manualmente.

  1. Configure el punto de interrupción en la línea de retorno.
  2. Cuando se golpea la línea de retorno, haga clic en la línea de retorno, coloque específicamente el cursor en la operación que desea ver, luego vaya a Ejecutar-> Evaluar expresión (o Alt-F8) y debería ejecutar la expresión en ese punto y devuelve lo que está devolviendo.

Nota : Si crea un punto de interrupción, hay muchas cosas que puede decirle a IDEA que haga con ellos, como si se rompe en un punto de interrupción, puede decirles que realicen una expresión y lo registren. Puede mirar alrededor con lo que puede hacer si hace clic derecho en un punto de interrupción y hace clic en propiedades.

ACTUALIZACIÓN : intente esto junto con la primera forma de hacerlo. No utilice "Valores de retorno del método Watch", ya que parece ralentizar o congelar la sesión de depuración. En su lugar, haga lo siguiente

  1. Haga clic derecho en la expresión de retorno que desea ver y haga clic en "Agregar a los relojes"
  2. A continuación, agregue un punto de interrupción del método como se indicó anteriormente.
  3. Depure su programa y su método se romperá en la firma del método.
  4. Presione la tecla F9 para continuar y debería romperse nuevamente DESPUÉS de que se haya calculado la expresión de retorno y su expresión de retorno esté en la columna de observación.

Recuerde que los puntos de interrupción del método son más lentos, por lo que puede llevar más tiempo, una forma complicada de mejorar esto si nota demasiado impacto en el rendimiento es simplemente establecer el punto de interrupción de la declaración de retorno (sin tener un punto de interrupción del método) y luego agregar el punto de interrupción del método DESPUÉS de que la declaración de retorno llegue al punto de interrupción y luego continúe.

Espero que esto ayude,

jluzwick
fuente
1
En realidad, una vez que haya agregado un punto de interrupción y un reloj a (nueva X ()), simplemente puede hacer Alt + F8 en ese reloj para 'analizar' el objeto devuelto. Esto es realmente útil.
Kedar Mhaswade
Si entiendo esto correctamente, la solución propuesta aquí solo funciona si la expresión no tiene efectos secundarios. Definitivamente no recomiendo poner expresiones complicadas en las variables / ventana de observación en general.
Mashmagar
Desde al menos 2016.3, hay una manera mucho mejor. Vea la respuesta de Birchlabs para más detalles. Ahora debería ser la respuesta aceptada.
Mikezx6r
150

En IntelliJ IDEA 2016.3: está oculto dentro del botón de engranaje del panel de depuración. Asegúrese de que Show Method Return Valuesesté marcado .

IntelliJ IDEA 2016.3 "Mostrar valores de retorno del método"

Use el depurador para dividir en algún lugar dentro de la función cuyo valor de retorno le gustaría ver.

entrar en función

Salga de la función (o salte hasta que escape):

salir

Observe que el valor de retorno aparece en sus variables:

observar el valor de retorno

Birchlabs
fuente
3
@Stan He actualizado mi respuesta para proporcionar un ejemplo trabajado.
Birchlabs
40

Hay un botón de valores de retorno del método Watch disponible en el panel del depurador .

Ver los valores de retorno del método : haga clic en este botón para ver los valores de retorno del último método ejecutado.

ver los valores de retorno del método

Configuración IDEA 12:

IDEA 12

CrazyCoder
fuente
2
Nada parece aparecer en las pestañas "Variables" o "Relojes". Estoy usando Groovy si eso importa. Además, parece que mostrará el valor de retorno del último método ejecutado desde el contexto del código de llamada, en lugar del contexto del método en sí. La diferencia importante de esto es que si puede verlo desde el contexto del método en sí, también puede ver los valores de las variables locales del método. Esto podría permitirle ver qué salió mal si el método devuelve un valor incorrecto.
Kyle
3
Muestra el valor de retorno en el panel "Variables" (usando el nombre del método completo). Esta debería haber sido la respuesta aceptada. @CrazyCoder +1 de mi parte :-)
Omri Spector
44
@CrazyCoder: ¿Esta característica todavía existe para IDEA 13? No puedo encontrarlo.
kevinarpe
1
Estoy en Intellij 15 y no veo esto también. ¿Puedes publicar una captura de pantalla?
Sanjiv Jivan
3
en enero de 2017 (Idea 2016.3.2): debe hacer clic en el ícono de Configuración (el engranaje, justo encima del elemento de menú amarillo en la segunda imagen), se muestra un menú que incluye "Mostrar valores de retorno del método". No es necesario reiniciar nada: después del próximo retorno de un método, su ObjectClassName.methodName () aparece en la vista Variables justo debajo de esto .
18446744073709551615
1

Esto fue preguntado hace un tiempo, pero uso un método diferente cuando quiero manejar esta situación.

Al depurar, puede marcar la expresión (en su caso, la expresión justo después del "retorno") y presionar CTRL + ALT + F8 (Expresión de evaluación rápida). IntelliJ abrirá una pequeña ventana que le mostrará el valor que se devolverá.

Ilimitado
fuente
2
Si usa un chip gráfico Intel, este método abreviado de teclado apagará sus monitores secundarios .
Coli
1
Usuarios de Linux: Ctrl + Alt + F8: enviará al usuario a la segunda terminal GUI. En Ubuntu presioné Ctrl + Alt + F2 para volver.
Dmitriy Pavlukhin