调试器中的步进和步进之间的区别是什么

我想调试一个(Java)程序的整个流程。我看到有几个选项步进通过我的程序。进入跨过的区别是什么?

170753 次浏览

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)行,跳过函数调用。

调试器的另一个有用的特性是步骤或步骤回报。。在这种情况下,步骤返回基本上会运行当前函数,直到返回上一层。换句话说,它将逐步通过f(x)f(1),然后返回到调用函数,结束在main()中的g(3)

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

进入

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

跨过

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

一步返回

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

重新开始

您希望调试器恢复“正常”;执行而不是按部就班

行断点

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

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

另请参阅

你不能通过步过来遍历方法的细节。 如果你想跳过当前行,你可以使用step over,然后你只需要按F6一次就可以移动到下一行。 如果你认为方法中有错误,使用F5检查细节

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

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

与调试器通信的方法

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

步骤为: "当下一个要执行的语句到达一个方法调用时,不要执行整个方法,而是执行该方法的第一行并停止"

在步: "当下一个要执行的语句到达一个方法调用时,执行整个方法并停止"

步骤: "结束执行被调用方的代码,并在执行返回到调用方时停止;

继续: "执行到下一个断点"

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

enter image description here