在Eclipse调试器中,Step Into和Step Over有什么区别?


194

我想调试Java程序的整个流程。之间有什么区别F5F6Eclipse中(进入)和(进入)?


FWIW跨步/跨步的相同逻辑适用于Xcode / Swift
亲爱的,

Answers:


270

考虑以下代码,将当前指令指针(将在下一步执行->f(x)行在)指示在in 的行g(),并由g(2)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
    }
}

如果此时要进入,则将移至中的println()f(),进入函数调用。

如果要在那一步结束,则将移至中的f(1)g(),从而结束函数调用。

调试器的另一个有用功能是单步退出或单步返回。在这种情况下,单步返回基本上将使您遍历当前功能,直到您返回一个级别。换句话说,它将逐步执行f(x)f(1),然后返回到调用函数,最后到达g(3)in main()

Eclipse的(至少欧洲,这是唯一一个我此刻派上用场)使用F5step intoF6用于step overF7step return


1
“然后再返回到调用函数在结束了g(3);在main()< -你假设你有你的当前位置的距离g(2),一旦你就大功告成了,你返回到它的下一行g(3)
蜂蜜

1
@Honey,是的,那里有一些歧义(无论当前g(2)还是g(3)正在进行通话),因此我在第一段中已经将其清除。感谢您的注意。
paxdiablo

144

调试代码行时,以下是常见的情况:

  • 进入)将要调用一个方法,并且您想调试该方法的代码,因此下一步就是进入该方法并继续逐步进行调试。
  • 逐步执行)一种方法即将被调用,但是您不希望调试此特定调用,因此您希望调试器将整个步骤完全执行该方法。
  • 返回步骤)您已经完成了对该方法的逐步调试,您只希望调试器运行整个方法,直到它作为一个完整的步骤返回为止。
  • 恢复)您希望调试器恢复“正常”执行,而不是逐步执行
  • 断点)您不在乎它如何到达那里,但是如果执行到达特定的代码行,则希望调试器在此处临时暂停执行,以便您决定要做什么。

Eclipse还具有其他高级调试功能,但这是基本的基础。

也可以看看



5

您无法通过使用逐步方法来详细了解方法。如果要跳过当前行,可以使用单步执行,然后只需要按F6一次即可移至下一行。而且,如果您认为该方法中存在某些错误,请使用F5来检查细节。


所以,如果我跨步并且函数包含一些打印语句,打印是否会发生?
username_4567

2

进入步骤在当前选择的要执行的行上调用下一个表达式,并在调用的方法中的下一个可执行行暂停执行。

单步 执行将执行当前选择的行,并在下一个可执行行上挂起。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.