Posso scoprire il valore restituito prima di tornare durante il debug in Intellij?


127

Con:

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

C'è un modo per vedere quale valore verrà restituito durante il debug? Come in qualche modo impostare un breakpoint che verrebbe colpito subito dopo il ritorno, ma prima che l'esecuzione passi al codice chiamante? Mi piacerebbe essere in grado di sapere qual è il valore restituito e anche di vedere quali sono i valori di tutte le variabili locali.

Il modo in cui lo faccio ora è facendo una variabile temporanea: Object ret = /* something complex */; return ret;. Ma questa è una seccatura e aggiunge anche una riga di codice non necessaria in più.

Nota: questa è la stessa domanda come posso scoprire il valore restituito prima di tornare durante il debug in Visual Studio , ma per intellij.

Risposte:


31

Sembra che ci siano un paio di modi per farlo. Il primo prevede l'impostazione del punto di interruzione sulla firma del metodo, nel tuo caso dovresti impostare un punto di interruzione sul metodo Object () {. Ciò ti consentirà di controllare l'ingresso e l'uscita del metodo. Ritengo che sia necessario utilizzarlo insieme a " Valori di restituzione del metodo Watch" come indicato sopra, ma non sono stato in grado di testarlo completamente poiché ci vuole troppo tempo per il calcolo. Attenzione, questo riduce drasticamente le prestazioni del debugger e il debug richiederà più tempo.

Inoltre è possibile eseguire le seguenti operazioni manualmente.

  1. Imposta il punto di interruzione sulla linea di ritorno.
  2. Quando la linea di ritorno viene colpita, fai clic sulla linea di ritorno, posiziona il cursore sull'operazione che vuoi vedere, quindi vai su Esegui-> Valuta espressione (o Alt-F8) e dovrebbe eseguire l'espressione in quel punto e restituire ciò che sta tornando.

Nota : se crei un punto di interruzione, ci sono molte cose che puoi dire a IDEA di fare con loro, come se si interrompono un punto di interruzione, puoi dire loro di eseguire un'espressione e registrarla. Puoi guardarti intorno con ciò che puoi fare se fai clic con il pulsante destro del mouse su un punto di interruzione e fai clic su Proprietà.

AGGIORNAMENTO : prova questo insieme al primo modo di farlo. Non utilizzare "Valori di restituzione del metodo" in quanto sembra rallentare o bloccare la sessione di debug. Invece, procedi come segue

  1. Fare clic con il tasto destro del mouse sull'espressione di ritorno che si desidera vedere e fare clic su "Aggiungi agli orologi"
  2. Quindi aggiungere un punto di interruzione del metodo come indicato sopra.
  3. Eseguire il debug del programma e il metodo si interromperà sulla firma del metodo.
  4. Premi il tasto F9 per continuare e dovrebbe rompersi nuovamente DOPO che l'espressione di ritorno è stata calcolata e l'espressione di ritorno dovrebbe trovarsi nella colonna di controllo.

Ricordare che i punti di interruzione del metodo sono più lenti, quindi potrebbe richiedere più tempo, un modo complicato per migliorarlo se si nota un impatto eccessivo sulle prestazioni è semplicemente impostare il punto di interruzione dell'istruzione return (senza avere un punto di interruzione del metodo) e quindi aggiungere il punto di interruzione del metodo DOPO che il punto di interruzione dell'istruzione return ha esito positivo e quindi continua.

Spero che questo ti aiuti,


1
In realtà, dopo aver aggiunto un punto di interruzione e un orologio a (nuova X ()), puoi semplicemente fare Alt + F8 su quell'orologio per "analizzare" l'oggetto restituito. Questo è davvero utile
Kedar Mhaswade,

Se lo capisco correttamente, la soluzione proposta qui funziona solo se l'espressione non ha effetti collaterali. Non consiglio vivamente di inserire espressioni complicate nelle variabili / finestra di controllo in generale.
Mashmagar,

Almeno dal 2016.3, c'è un modo molto migliore. Vedi la risposta di Birchlabs per i dettagli. Ora dovrebbe essere la risposta accettata.
Mikezx6r,

150

Su IntelliJ IDEA 2016.3: è nascosto all'interno del pulsante ingranaggio del pannello di debug. Assicurarsi che Show Method Return Valuessia selezionato .

IntelliJ IDEA 2016.3 "Mostra valori di ritorno metodo"

Utilizzare il debugger per interrompere da qualche parte all'interno della funzione di cui si desidera visualizzare il valore restituito.

entrare in funzione

Esci dalla funzione (o passa fino a quando non scappi):

uscire

Osserva che il valore restituito appare nelle tue variabili:

osservare il valore restituito


3
@Stan Ho aggiornato la mia risposta per fornire un esempio funzionante.
Birchlabs,

40

Nel pannello del debugger è disponibile il pulsante Valori di restituzione del metodo Watch .

Guarda i valori di ritorno del metodo : fai clic su questo pulsante per guardare i valori di ritorno dell'ultimo metodo eseguito.

valori di ritorno del metodo watch

Configurazione IDEA 12:

IDEA 12


2
Nulla sembra apparire nelle schede "Variabili" o "Orologi". Sto usando Groovy se questo è importante. Inoltre, sembra che mostrerà il valore di ritorno dell'ultimo metodo eseguito dal contesto del codice chiamante, piuttosto che dal contesto del metodo stesso. La differenza importante di questo è che se riesci a vederlo dal contesto del metodo stesso, puoi anche guardare i valori delle variabili locali del metodo. Ciò potrebbe consentire di vedere cosa è andato storto se il metodo restituisce un valore errato.
Kyle,

3
Mostra il valore restituito nel riquadro "Variabili" (utilizzando il nome del metodo completo). Questa avrebbe dovuto essere la risposta accettata. @CrazyCoder +1 da parte mia :-)
Omri Spector

4
@CrazyCoder: questa funzione esiste ancora per IDEA 13? Non riesco a trovarlo.
kevinarpe,

1
Sono su Intellij 15 e non vedo neanche questo. Puoi pubblicare uno screenshot?
Sanjiv Jivan,

3
a gennaio 2017 (Idea 2016.3.2): devi fare clic sull'icona Impostazioni (l'ingranaggio, proprio sopra la voce di menu gialla sulla seconda immagine), un menu mostra che include "Mostra valori di ritorno del metodo". Non è necessario riavviare nulla: dopo il successivo ritorno da un metodo, il suo ObjectClassName.methodName () appare nella vista Variabili proprio sotto questo .
18446744073709551615,

1

Questo è stato chiesto poco fa, ma uso un metodo diverso quando voglio gestire questa situazione.

Durante il debug, puoi contrassegnare l'espressione (nel tuo caso, l'espressione subito dopo il "return") e premere CTRL + ALT + F8 (espressione di valutazione rapida). IntelliJ aprirà una piccola finestra che mostra il valore che verrà restituito.


2
Se si utilizza un chip grafico Intel, questa scorciatoia da tastiera spegne i monitor secondari .
Coli,

1
Utenti Linux: Ctrl + Alt + F8: invierà l'utente al 2 ° Terminale GUI. In Ubuntu ho premuto Ctrl + Alt + F2 per tornare indietro.
Dmitriy Pavlukhin,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.