我想调试一个(Java)程序的整个流程。我看到有几个选项可以逐步完成我的程序。step into和step over的区别是什么?


当前回答

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

执行当前选择的行,并挂起到下一个可执行行。

其他回答

考虑以下代码,在g()中的f(x)行中使用当前的指令指针(接下来将执行的行,由->表示),已被main()中的g(2)行调用:

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
    }
}

如果您要进入这一点,您将移动到f()中的println()行,进入函数调用。

如果您在这一点上跳过,您将移动到g()中的f(1)行,跳过函数调用。

调试器的另一个有用特性是步出或步进返回。在这种情况下,step return基本上会让你遍历当前函数,直到你回到上一层。换句话说,它将遍历f(x)和f(1),然后返回到调用函数,在main()中结束于g(3)。

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

执行当前选择的行,并挂起到下一个可执行行。

与调试器通信的方法

(或者,我如何向祖母解释我的公路旅行)

进入:“当要执行的下一个语句到达一个方法调用时,不要执行整个方法,而是执行该方法的第一行并停止”

过渡:“当要执行的下一个语句到达一个方法调用时,整体执行该方法并停止”

退出:“完成被调用方代码的执行,并在执行返回到调用方时停止”

继续:“执行到下一个断点”

下面是一个很好的例子来实际演示上述概念:

Step into将深入研究方法调用 Step over将执行这一行并进入下一行

当调试代码行时,下面是常见的场景:

进入

将要调用一个方法,并且希望调试到该方法的代码中,因此下一步是进入该方法并继续逐步调试。

跨过

一个方法即将被调用,但您对调试这个特定的调用不感兴趣,因此希望调试器将该方法作为一个完整的步骤完全执行。

一步返回

您已经完成了这个方法的逐步调试,您只希望调试器运行整个方法,直到它作为一个完整的步骤返回。

重新开始

您希望调试器恢复“正常”执行,而不是一步一步地执行

行断点

您不关心它是如何到达那里的,但是如果执行到达了特定的代码行,您希望调试器暂时暂停那里的执行,以便您可以决定做什么。

Eclipse还有其他高级调试特性,但这些都是基本的基础。

另请参阅

免费视频教程:Eclipse和Java:使用调试器 IBM/DeveloperWorks/ Eclipse平台调试 IBM/DeveloperWorks/学习调试的基本要领