debugging 调试器中的“单步执行”和“单步执行”有何区别

xtupzzrd  于 2023-03-08  发布在  其他
关注(0)|答案(7)|浏览(242)

我想调试一个(Java)程序的整个流程。我看到有几个选项可以 stepping 通过我的程序。step intostep over 之间有什么区别?

nhaq1z21

nhaq1z211#

考虑以下代码,当前指令指针(接下来要执行的行,由->指示)位于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 out of 或step return。 在这种情况下,step return基本上会遍历当前函数,直到返回上一级。换句话说,它会遍历f(x)f(1),然后返回到调用函数,最后到达main()中的g(3)

iq3niunx

iq3niunx2#

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

步入

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

跨过

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

步进返回

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

简历

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

行断点

您不关心它是如何到达那里的,但是如果执行到达特定的代码行,您希望调试器在那里临时暂停执行,以便您可以决定要做什么。
Eclipse还有其他高级调试特性,但这些都是基本的基础。

另请参见

soat7uwm

soat7uwm3#

单步执行将深入分析方法调用
stepover将执行该行并转到下一行

cgfeq70w

cgfeq70w4#

与调试器通信的方法

  • (或者,我该如何向祖母解释我的公路旅行 *
    单步执行:“当要执行的下一条语句到达方法调用时,不要将该方法作为一个整体执行,而是执行该方法的第一行并停止”
    Step Over:“当要执行的下一条语句到达方法调用时,将该方法作为一个整体执行并停止”
    跳出:“结束执行被调用方的代码,并在执行返回到调用方时停止”
    继续:“执行到下一个断点”

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

eqqqjvef

eqqqjvef5#

使用“跳过”无法查看方法的详细信息。如果要跳过当前行,可以使用“跳过”,然后只需按一次F6即可移动到下一行。如果您认为方法中存在错误,请使用F5检查详细信息。

yeotifhr

yeotifhr6#

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

643ylb08

643ylb087#

图像中有以下功能:

func aa() {
   a1()
}
func bb() {
   b1()
}

并按以下顺序执行它们。它们会🚦注解您设置了断点的行。

1: 🚦aa() 
2:   bb()
3: 🚦cc()

继续:继续应用程序流。将在下一个断点停止。在这种情况下,它将在第3行停止。
跳过:将移动到下一行。在这种情况下,它将停止在第2行
单步执行:将进入aa()函数。将在a1()行停止
步出:如果您执行了“单步执行”,则步出,将返回到第1行

如果您想更直观地看到这一点:

继续:仅跳跃
跳过:下移
单步执行:右移
跳过:左移
上述方向或多或少与您阅读代码的方向相关。或者与您阅读书籍(或观看电影)的方式相关。“继续”只是跳到书籍的特定页面。“跨过”只是移动到书籍的下一章。“步入”在章节内移动。“跳出”则返回到您所在的上一个层次级别。

有什么区别?

实际上,每当遇到断点时,您可能会这样:

  • 跳转到另一个断点==〉“我不在乎这个,让我们继续”
  • Step Over ==〉“好的,我对正在发生的事情有一个相当好的理解,但让我们看看接下来会发生什么
  • Step Into ==〉“嗯......让我们看看这个函数在内部做什么
  • Step Out ==〉“啊,我知道这个函数在做什么了,“让我们退出这个函数,回到我们之前的位置”

相关问题