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)。
7条答案
按热度按时间nhaq1z211#
考虑以下代码,当前指令指针(接下来要执行的行,由
->
指示)位于g()
中的f(x)
行,已由main()
中的g(2)
行调用:如果此时要单步执行 *,则将移动到
f()
中的println()
行,单步执行函数调用。如果此时要跳过 *,则将移动到
g()
中的f(1)
行,跳过函数调用。调试器的另一个有用特性是step out of 或step return。 在这种情况下,step return基本上会遍历当前函数,直到返回上一级。换句话说,它会遍历
f(x)
和f(1)
,然后返回到调用函数,最后到达main()
中的g(3)
。iq3niunx2#
调试代码行时,常见的情况如下:
步入
即将调用一个方法,并且您希望调试到该方法的代码中,因此下一步是进入该方法并继续一步一步地调试。
跨过
一个方法即将被调用,但是您对调试这个特定的调用不感兴趣,所以您希望调试器将该方法作为一个完整的步骤来执行。
步进返回
您已经完成了对该方法的逐步调试,现在只希望调试器运行整个方法,直到它作为一个完整步骤返回为止。
简历
您希望调试器恢复“正常”执行,而不是逐步执行
行断点
您不关心它是如何到达那里的,但是如果执行到达特定的代码行,您希望调试器在那里临时暂停执行,以便您可以决定要做什么。
Eclipse还有其他高级调试特性,但这些都是基本的基础。
另请参见
soat7uwm3#
单步执行将深入分析方法调用
stepover将执行该行并转到下一行
cgfeq70w4#
与调试器通信的方法
单步执行:“当要执行的下一条语句到达方法调用时,不要将该方法作为一个整体执行,而是执行该方法的第一行并停止”
Step Over:“当要执行的下一条语句到达方法调用时,将该方法作为一个整体执行并停止”
跳出:“结束执行被调用方的代码,并在执行返回到调用方时停止”
继续:“执行到下一个断点”
下面是一个很好的例子,实际演示上述概念:
eqqqjvef5#
使用“跳过”无法查看方法的详细信息。如果要跳过当前行,可以使用“跳过”,然后只需按一次F6即可移动到下一行。如果您认为方法中存在错误,请使用F5检查详细信息。
yeotifhr6#
单步执行调用当前选定行上要执行的下一个表达式,并在调用的方法中的下一个可执行行处暂停执行。
步过执行当前选定的行,并在下一个可执行行暂停。
643ylb087#
图像中有以下功能:
并按以下顺序执行它们。它们会🚦注解您设置了断点的行。
继续:继续应用程序流。将在下一个断点停止。在这种情况下,它将在第3行停止。
跳过:将移动到下一行。在这种情况下,它将停止在第2行
单步执行:将进入aa()函数。将在
a1()
行停止步出:如果您执行了“单步执行”,则步出,将返回到第1行
如果您想更直观地看到这一点:
继续:仅跳跃
跳过:下移
单步执行:右移
跳过:左移
上述方向或多或少与您阅读代码的方向相关。或者与您阅读书籍(或观看电影)的方式相关。“继续”只是跳到书籍的特定页面。“跨过”只是移动到书籍的下一章。“步入”在章节内移动。“跳出”则返回到您所在的上一个层次级别。
有什么区别?
实际上,每当遇到断点时,您可能会这样: