我想调试一个(Java)程序的整个流程。我看到有几个选项可以逐步完成我的程序。step into和step over的区别是什么?
当前回答
与调试器通信的方法
(或者,我如何向祖母解释我的公路旅行)
进入:“当要执行的下一个语句到达一个方法调用时,不要执行整个方法,而是执行该方法的第一行并停止”
过渡:“当要执行的下一个语句到达一个方法调用时,整体执行该方法并停止”
退出:“完成被调用方代码的执行,并在执行返回到调用方时停止”
继续:“执行到下一个断点”
下面是一个很好的例子来实际演示上述概念:
其他回答
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)。
当调试代码行时,下面是常见的场景:
进入
将要调用一个方法,并且希望调试到该方法的代码中,因此下一步是进入该方法并继续逐步调试。
跨过
一个方法即将被调用,但您对调试这个特定的调用不感兴趣,因此希望调试器将该方法作为一个完整的步骤完全执行。
一步返回
您已经完成了这个方法的逐步调试,您只希望调试器运行整个方法,直到它作为一个完整的步骤返回。
重新开始
您希望调试器恢复“正常”执行,而不是一步一步地执行
行断点
您不关心它是如何到达那里的,但是如果执行到达了特定的代码行,您希望调试器暂时暂停那里的执行,以便您可以决定做什么。
Eclipse还有其他高级调试特性,但这些都是基本的基础。
另请参阅
免费视频教程:Eclipse和Java:使用调试器 IBM/DeveloperWorks/ Eclipse平台调试 IBM/DeveloperWorks/学习调试的基本要领
您不能通过使用步骤over来查看该方法的详细信息。 如果你想跳过当前一行,你可以使用step over,然后你只需要按一次F6就可以移动到下一行。 如果您认为方法中有错误,请使用F5检查细节。
推荐文章
- 如何检查Flutter应用程序是否正在调试中运行?
- 如何设置断点在内联Javascript在谷歌Chrome?
- Chrome调试-打破下一个点击事件
- PHP -调试Curl
- 抛出异常时中断
- 如何逐步通过Python代码来帮助调试问题?
- 我如何调试一个HTTP POST在Chrome?
- Spring RestTemplate -如何启用请求/响应的完整调试/日志记录?
- 如何终止脚本执行时调试谷歌Chrome?
- 我可以在GDB中设置“内存访问”的断点吗?
- 调试器中的步进和步进之间的区别是什么
- 将IntelliJ IDEA调试器附加到正在运行的Java进程
- 如何确定代码是否在DEBUG / RELEASE版本中运行?
- 在Visual Studio调试器中查看数组?
- 在错误时自动启动python调试器