繁体   English   中英

调试器中的 Step Into 和 Step Over 有什么区别

[英]What is the difference between Step Into and Step Over in a debugger

我想调试(Java)程序的整个流程。 我看到有几个选项可以单步执行我的程序。 step intostep over什么不一样?

考虑以下代码,其中包含g() f(x)行的当前指令指针(接下来将执行的行,由->指示g() ,已被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)行,跳过函数调用。

调试器的另一个有用功能是单步退出或单步返回。 在这种情况下,单步返回基本上会引导您完成当前功能,直到您返回上一级。 换句话说,它将逐步通过f(x)f(1) ,然后返回到调用函数以在main() g(3)处结束。

在调试代码行时,以下是通常的场景:

  • ( Step Into ) 一个方法即将被调用,你想调试到那个方法的代码中,所以下一步就是进入那个方法,继续一步步调试。
  • ( Step Over ) 一个方法即将被调用,但您对调试这个特定的调用不感兴趣,因此您希望调试器作为一个完整的步骤来完全执行该方法。
  • ( Step Return ) 您已经完成了该方法的逐步调试,并且您只希望调试器运行整个方法,直到它作为一个完整的步骤返回。
  • ( Resume ) 您希望调试器恢复“正常”执行而不是逐步执行
  • ( Line Breakpoint ) 您不关心它是如何到达那里的,但是如果执行到达特定的代码行,您希望调试器在那里暂时暂停执行,以便您可以决定要做什么。

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

也可以看看

步入将深入研究方法调用
step over 只会执行该行并转到下一行

您无法通过使用 step over 来查看方法的详细信息。 如果你想跳过当前行,你可以使用step over,那么你只需要按一次F6就可以移动到下一行。 如果您认为该方法有问题,请使用F5检查详细信息。

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

Step Over当前选择的行被执行并在下一个可执行行上挂起。

与调试器通信的方法

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

Step Into: “当下一个要执行的语句到达方法调用时,不要将方法作为一个整体执行,而是执行该方法的第一行并停止”

Step Over: “当下一个要执行的语句到达方法调用时,将方法作为一个整体执行并停止”

Step Out: “结束执行被调用者的代码并在执行返回到调用者时停止”

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

这是一个很好的例子,可以实际演示上述概念:

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM