我想调试一个(Java)程序的整个流程。我看到有几个选项可以逐步完成我的程序。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检查细节。
与调试器通信的方法
(或者,我如何向祖母解释我的公路旅行)
进入:“当要执行的下一个语句到达一个方法调用时,不要执行整个方法,而是执行该方法的第一行并停止”
过渡:“当要执行的下一个语句到达一个方法调用时,整体执行该方法并停止”
退出:“完成被调用方代码的执行,并在执行返回到调用方时停止”
继续:“执行到下一个断点”
下面是一个很好的例子来实际演示上述概念:
推荐文章
- 当有命令行参数时,如何使用GDB分析程序的核心转储文件?
- 如何在Visual Studio中找到堆栈跟踪?
- 有一个好的Valgrind Windows的替代品吗?
- Eclipse调试器总是阻塞在ThreadPoolExecutor上,没有任何明显的异常,为什么?
- Visual Studio:如何打破处理异常?
- 确保您的项目构建设置正在生成一个dSYM文件。对于所有配置,DEBUG_INFORMATION_FORMAT都应该设置为dwarf-with-dsym
- 如何获得GDB中所有线程的回溯?
- 如何检测IE11?
- 如何通过参数和重定向stdin从一个文件到程序运行在gdb?
- 我如何调试git/git-shell相关的问题?
- Visual Studio拒绝忘记断点?
- 如何在Python自己的调试器(PDB)中执行多行语句
- 我如何在Visual Studio中预处理后看到C/ c++源文件?
- Linux有c++ gdb图形用户界面吗?
- 是什么让Visual Studio调试器停止评估ToString重写?