断点与调试
1. 前言
通过前面章节的介绍,我们已经知道如何运行 Java 程序了。
现在让我们看看当程序运行达不到我们的预期的时候,我们如何进行调试,以便找出其中的 BUG。
Eclipse 中的 Java开发工具包(JDT)为我们提供了一个调试器(debugger)。
调试器可以帮助我们查找代码中的问题,它带来了设置断点,挂起运行中的程序,检查变量的内容等功能。
要使用调试器对我们的代码进行调试,我们首先需要知道断点是什么以及如何设置断点。
知道如何设置了断点后,我们还需要去熟悉 Debug 视图中的执行控制命令,这样,我们才知道如何进行调试。
下面,让我们从了解断点开始,学习如何在 Eclipse 中进行调试。
2. 断点
2.1 断点是什么
断点是 Eclipse 为我们提供的一个功能,它可以让我们把运行中的程序挂起(暂停)。
当我们进行调试时,程序遇到断点的时候会被挂起(暂停),此时,我们可以对程序进行检查。这也是断点的作用。
那么,在Eclipse中,断点是什么样子的呢?
通常,我们会通过 Java编辑器中的标尺设置断点,如下图所示:
上图中红色框起来的位置就是我们的标尺区域。
同时如果设置了断点,将会显示一个蓝色的圆圈,它代表了我们在 Eclipse 中的断点。
2.2 添加断点
添加断点,我们有两种方法:
- 直接双击标尺中的行号
- 鼠标右键标尺中的行号,在弹出的菜单中进行选择。
第一种方法直接双击行号后,就可以为该行代码添加断点了(行号左边出现蓝色圆圈)。
如果要取消断点,只需要再次双击该行号。
第二种方法,在我们鼠标右键标尺中的行号后,在弹出的菜单中选择 Toggle Breakpoint 选项后,将为该行添加断点。如下图所示:
如果要取消断点,只需要再次选择 Toggle Breakpoint 选项。
如菜单中所示,我们还可以通过 Shift + Command + B (如果是非Mac系统,则是 Shift + Ctrl + B)来操作,该操作将直接为我们光标所在的行添加或取消断点。
2.3 禁用断点
除了通过再次操作添加断点的方式取消断点外,我们还可以禁用断点。
断点如果禁用,那么该行代码将不会被挂起。
在断点处鼠标右键,此时的出现的菜单将可以选择 Disable Breakpoint 选项,如下图所示:
如菜单中所示,我们还可以通过 Shift + 双击鼠标左键 来禁用断点。
选择 Disable Breakpoint 选项后,断点将由蓝色的圆圈,变成白色的圆圈:
同样,如果要恢复,只需要再次执行一遍该操作即可。
3. 调试
了解断点后,让我们来看看如何对我们的 Java 代码进行调试。
3.1 打断点
首先,如果要调试代码,我们要在需要调试的代码位置打上断点:
打上断点后,我们就可以开始启动调试了。
3.2 启动调试
启动调试有 3 种途径:
- 在 Java 文件的空白处点击鼠标右键,在弹出的菜单中选择 Debug As 选项。
- 鼠标右键我们的 java 文件,在弹出的菜单中选择 Debug As 选项。
- 在工具栏中找到 Debug 图标,在弹出的菜单中选择 Debug As 选项。
不管选择哪种,我们都可以启动我们的调试,下图是通过在工具栏中选择 Debug 图标的方式:
选择 Debug As -> 1 Java Application 后,我们将看到询问我们是否切换到 Debug 透视图的窗口,如下图所示:
如果我们已经处于 Debug 透视图 那么就不会出现该弹窗。
我们选择 Switch,这将帮我们打开 Debug 透视图,如下图所示:
Debug 透视图中默认有两个视图,分别是左边的 Debug 视图,右边的变量视图。
3.3 Debug 透视图
3.3.1 Debug 视图
Debug 视图显示的是我们正在调试过程中被挂起的线程的堆栈信息。
其中每个线程在视图中被显示为树中的一个节点,如下图红框所标示的就是一个节点:
和 Debug视图 相关联的还有一些常用的按钮,如下图所示:
其中 2,3,4,5 是我们的调试中的 执行控制命令,图中标示的按钮如下:
- 这是个开关选项,如果选择打开,则跳过所有的断点。
- 恢复挂起的线程(Resume)。
- 终止被选择的调试目标(Terminate)。
- 进入当前被高亮的语句(Step Into)。
- 开始执行被高亮语句的下一个语句(Step Over) 。
- 这是个开关选项,如果选择打开,则开始使用步骤过滤器(Use Step Filters)。
除此之外我们还有三个按钮没有被亮起,这是三个也是属于调试中的执行控制命令:
- 可以挂起线程,以便我们浏览或修改代码,检查数据,执行步骤等(Suspend)。
- 此按钮用于远程调试用,点击时将断开连接(Disconnect)。
- 将跳出当前的方法(Step Return)。
现在,让我们点击 Step Over 按钮,把程序运行到第 12 行,如下图所示:
接下来,让我们把关注点放到变量视图中。
3.3.2 变量视图
变量视图显示的是调试中相关的变量信息:
我们可以看出来,变量视图分为上下两部分。
上部分就是变量的信息,包括变量名和变量值。
下部分其实一个详细窗格,在我们选择变量后,可以用于更全面地显示变量的信息。
我们这里只有一个值,但是如果是一个数组,该窗格能体现更多的作用。
3.4 完成调试
通过一行一行地执行我们的代码,我们就可以完成对我们代码的调试。
通常我们会通过前面介绍的 Debug 视图中的执行控制命令来一步步地控制语句的运行,然后观察变量视图中的内容。
调试中,高亮的语句是当前被挂起的地方。
我们可以使用 Step Into 或者 Step Over 按钮进行下一条语句的执行。
当整个程序执行完,或者我们自己点击终止按钮时,调试结束。
5. 小结
本文中讲解了断点和调试的内容。
其中的重点是,我们需要了解如何设置断点和熟悉 Debug 视图。
多去使用 Debug 视图是掌握 Eclipse 调试的好办法。