Qual è la differenza tra Step Into e Step Over nel debugger di Eclipse?


194

Voglio eseguire il debug dell'intero flusso di un programma Java. Qual'è la differenza tra F5(step into) e F6(step over) in eclipse?


FWIW si applica la stessa logica di passaggio / passaggio in applica a Xcode / Swift
Honey

Risposte:


270

Considerare il seguente codice con il puntatore dell'istruzione corrente (la riga che verrà eseguita successivamente, indicata da ->) nella f(x)riga in g(), essendo stata chiamata dalla g(2)riga in main():

public class testprog {
    static void f (int x) {
        System.out.println ("num is " + (x+0)); // <- STEP INTO
    }

    static void g (int x) {
->      f(x); //
        f(1); // <----------------------------------- STEP OVER
    }

    public static void main (String args[]) {
        g(2);
        g(3); // <----------------------------------- STEP OUT OF
    }
}

Se si dovesse fare un passo in a quel punto, si sposta alla println()riga f(), entrando nella chiamata di funzione.

Se dovessi passare da quel punto in poi, ti sposterai sulla f(1)linea g(), scavalcando la chiamata di funzione.

Un'altra caratteristica utile di debugger è il passo su o la fase di ritorno. In tal caso, un ritorno a capo ti farà passare attraverso la funzione corrente fino a quando non salirai di un livello. In altre parole, passerà attraverso f(x)e f(1), quindi, tornerà alla funzione di chiamata per finire in g(3)inmain() .

Eclipse (almeno Europa, che è l'unica che ho a portata di mano al momento) usa F5per step into, F6per step overe F7per step return.


1
", quindi torna alla funzione di chiamata per finire in g(3); in main()" <- Stai assumendo di essere arrivato alla posizione corrente da g(2)e una volta che hai finito di tornare alla riga successiva g(3)?
Miele

1
@ Ciao, sì, c'era qualche ambiguità lì (se g(2)o la g(3)chiamata è attualmente attiva) quindi l'ho chiarito nel primo paragrafo. Grazie per il testa a testa.
paxdiablo,

144

Durante il debug di righe di codice, ecco i soliti scenari:

  • ( Entra ) Un metodo sta per essere invocato e si desidera eseguire il debug nel codice di quel metodo, quindi il passaggio successivo è quello di entrare in quel metodo e continuare il debug passo dopo passo.
  • ( Passaggio ) Un metodo sta per essere invocato, ma non sei interessato al debug di questa particolare chiamata, quindi desideri che il debugger esegua quel metodo completamente come un intero passaggio.
  • ( Step Return ) Hai finito il debug di questo metodo passo dopo passo e vuoi solo che il debugger esegua l'intero metodo fino a quando non ritorna come un intero passo.
  • ( Riprendi ) Si desidera che il debugger riprenda l'esecuzione "normale" anziché passo per passo
  • ( Punto di interruzione riga ) Non ti interessa come è arrivato lì, ma se l'esecuzione raggiunge una determinata riga di codice, vuoi che il debugger sospenda temporaneamente l'esecuzione lì in modo da poter decidere cosa fare.

Eclipse ha altre funzionalità di debug avanzate, ma questi sono i fondamenti di base.

Guarda anche



5

Non è possibile esaminare i dettagli del metodo utilizzando il passaggio sopra. Se si desidera saltare la riga corrente, è possibile utilizzare il passaggio, quindi è sufficiente premere F6una sola volta per passare alla riga successiva. E se pensi che ci sia qualcosa di sbagliato nel metodo, usa F5per esaminare i dettagli.


Quindi se passo oltre e se la funzione contiene qualche istruzione di stampa, la stampa avverrà o no?
username_4567

2

Step Into Viene invocata l'espressione successiva sulla riga attualmente selezionata da eseguire e l'esecuzione viene sospesa sulla riga eseguibile successiva nel metodo richiamato.

Passaggio La riga attualmente selezionata viene eseguita e sospende sulla riga eseguibile successiva.

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.