¿Cuál es la diferencia entre Step Into y Step Over en el depurador de Eclipse?

194

Quiero depurar todo el flujo de un programa Java. ¿Cuál es la diferencia entre F5(step into) y F6(step over) en eclipse?

JavaUser
fuente
FWIW, la misma lógica de paso sobre / paso para aplicar a Xcode / Swift
Honey

Respuestas:

270

Considere el siguiente código con su puntero de instrucción actual (la línea que se ejecutará a continuación, indicada por ->) en la f(x)línea de entrada g(), habiendo sido llamada por la g(2)línea de entrada 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
    }
}

Si tuviera que intervenir en ese punto, pasará a la println()línea y entrará f()en la llamada a la función.

Si tuviera que dar un paso adelante en ese punto, pasará a la f(1)línea g(), pasando por encima de la llamada a la función.

Otra característica útil de los depuradores es el paso fuera o el paso atrás . En ese caso, un retorno de paso básicamente lo ejecutará a través de la función actual hasta que vuelva a subir un nivel. En otras palabras, avanzará f(x)y f(1)luego regresará a la función de llamada para terminar g(3)en main().

Eclipse (al menos Europa, que es el único que tengo a mano en este momento) usa F5para step into, F6para step overy F7para step return.

paxdiablo
fuente
1
"luego de vuelta a la función que llama a terminar en g(3), en main()" <- ¿Está asumiendo que usted tiene a su ubicación actual a partir g(2)y una vez que está todo hecho que regrese a su siguiente línea g(3)?
Miel
1
@Honey, sí, había cierta ambigüedad allí (ya g(2)sea ​​que la g(3)llamada esté actualmente activa), así que lo eliminé en el primer párrafo. Gracias por el aviso.
paxdiablo
144

Al depurar líneas de código, estos son los escenarios habituales:

  • ( Paso a paso ) Se está a punto de invocar un método y desea depurar el código de ese método, por lo que el siguiente paso es entrar en ese método y continuar la depuración paso a paso.
  • ( Paso a paso ) Se va a invocar un método, pero no está interesado en depurar esta invocación en particular, por lo que desea que el depurador ejecute ese método completamente como un paso completo.
  • ( Paso de retorno ) Ya ha terminado de depurar este método paso a paso, y solo desea que el depurador ejecute todo el método hasta que regrese como un paso completo.
  • ( Reanudar ) Desea que el depurador reanude la ejecución "normal" en lugar de paso a paso
  • ( Punto de interrupción de línea ) No le importa cómo llegó allí, pero si la ejecución alcanza una línea de código particular, desea que el depurador pause temporalmente la ejecución allí para que pueda decidir qué hacer.

Eclipse tiene otras características avanzadas de depuración, pero estos son los fundamentos básicos.

Ver también

poligenelubricantes
fuente
22

step into cavará en llamadas a métodos
step over solo ejecutará la línea e irá a la siguiente

Jean-Bernard Pellerin
fuente
1
¿Qué tal "salir"?
Koray Tugay
5

No puede pasar por los detalles del método utilizando el paso. Si desea omitir la línea actual, puede usar el paso adelante, solo necesita presionar el F6botón una sola vez para pasar a la línea siguiente. Y si cree que hay algún error en el método, úselo F5para examinar los detalles.

wanana
fuente
Entonces, si paso y si la función contiene alguna declaración de impresión, ¿ocurrirá la impresión o no?
username_4567
2

Paso a paso Se invoca la siguiente expresión en la línea actualmente seleccionada que se ejecutará, y la ejecución se suspende en la siguiente línea ejecutable en el método que se invoca.

Paso a paso La línea seleccionada actualmente se ejecuta y se suspende en la siguiente línea ejecutable.

Yogesh Yadav
fuente