断点与调试

1. 前言

通过前面章节的介绍,我们已经知道如何运行 Java 程序了。

现在让我们看看当程序运行达不到我们的预期的时候,我们如何进行调试,以便找出其中的 BUG。

Eclipse 中的 Java开发工具包(JDT)为我们提供了一个调试器(debugger)

调试器可以帮助我们查找代码中的问题,它带来了设置断点,挂起运行中的程序,检查变量的内容等功能。

要使用调试器对我们的代码进行调试,我们首先需要知道断点是什么以及如何设置断点。

知道如何设置了断点后,我们还需要去熟悉 Debug 视图中的执行控制命令,这样,我们才知道如何进行调试。

下面,让我们从了解断点开始,学习如何在 Eclipse 中进行调试。

2. 断点

2.1 断点是什么

断点是 Eclipse 为我们提供的一个功能,它可以让我们把运行中的程序挂起(暂停)。

当我们进行调试时,程序遇到断点的时候会被挂起(暂停),此时,我们可以对程序进行检查。这也是断点的作用。

那么,在Eclipse中,断点是什么样子的呢?

通常,我们会通过 Java编辑器中的标尺设置断点,如下图所示:

图片描述

上图中红色框起来的位置就是我们的标尺区域。

同时如果设置了断点,将会显示一个蓝色的圆圈,它代表了我们在 Eclipse 中的断点。

2.2 添加断点

添加断点,我们有两种方法:

  1. 直接双击标尺中的行号
  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 种途径:

  1. 在 Java 文件的空白处点击鼠标右键,在弹出的菜单中选择 Debug As 选项。
  2. 鼠标右键我们的 java 文件,在弹出的菜单中选择 Debug As 选项。
  3. 在工具栏中找到 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 是我们的调试中的 执行控制命令,图中标示的按钮如下:

  1. 这是个开关选项,如果选择打开,则跳过所有的断点。
  2. 恢复挂起的线程(Resume)。
  3. 终止被选择的调试目标(Terminate)。
  4. 进入当前被高亮的语句(Step Into)。
  5. 开始执行被高亮语句的下一个语句(Step Over) 。
  6. 这是个开关选项,如果选择打开,则开始使用步骤过滤器(Use Step Filters)。

除此之外我们还有三个按钮没有被亮起,这是三个也是属于调试中的执行控制命令:

图片描述

  1. 可以挂起线程,以便我们浏览或修改代码,检查数据,执行步骤等(Suspend)。
  2. 此按钮用于远程调试用,点击时将断开连接(Disconnect)。
  3. 将跳出当前的方法(Step Return)。

现在,让我们点击 Step Over 按钮,把程序运行到第 12 行,如下图所示:

图片描述

接下来,让我们把关注点放到变量视图中。

3.3.2 变量视图

变量视图显示的是调试中相关的变量信息:

图片描述

我们可以看出来,变量视图分为上下两部分。

上部分就是变量的信息,包括变量名和变量值。

下部分其实一个详细窗格,在我们选择变量后,可以用于更全面地显示变量的信息。

我们这里只有一个值,但是如果是一个数组,该窗格能体现更多的作用。

3.4 完成调试

通过一行一行地执行我们的代码,我们就可以完成对我们代码的调试。

通常我们会通过前面介绍的 Debug 视图中的执行控制命令来一步步地控制语句的运行,然后观察变量视图中的内容。

调试中,高亮的语句是当前被挂起的地方。

我们可以使用 Step Into 或者 Step Over 按钮进行下一条语句的执行。

当整个程序执行完,或者我们自己点击终止按钮时,调试结束。

5. 小结

本文中讲解了断点和调试的内容。

其中的重点是,我们需要了解如何设置断点和熟悉 Debug 视图。

多去使用 Debug 视图是掌握 Eclipse 调试的好办法。