Eclipse 对调试应用程序有很好的支持。它可视化逐步执行并帮助我们发现错误。
为了演示 Eclipse 中的调试功能,我们将使用一个示例程序PerfectSquareCounter。该程序计算给定数字下的完美平方总数,甚至完美平方数:
public class PerfectSquareCounter {
static int evenPerfectSquareNumbers = 0;
public static void main(String[] args) {
int i = 100;
System.out.println("Total Perfect Squares: " + calculateCount(i));
System.out.println("Even Perfect Squares : " + evenPerfectSquareNumbers);
}
public static int calculateCount(int i) {
int perfectSquaresCount = 0;
for (int number = 1; number <= i; number++) {
if (isPerfectSquare(number)) {
perfectSquaresCount++;
if (number % 2 == 0) {
evenPerfectSquareNumbers++;
}
}
}
return perfectSquaresCount;
}
private static boolean isPerfectSquare(int number) {
double sqrt = Math.sqrt(number);
return sqrt - Math.floor(sqrt) == 0;
}
}
(1)调试模式
首先,我们需要在 Eclipse 中以调试模式启动 Java 程序。这可以通过两种方式实现:
右键单击编辑器并选择Debug As -> Java Application(如下图所示)
从工具栏调试程序(在下面的屏幕截图中突出显示)
(2)断点
我们需要定义程序执行应该暂停以进行调查的点。这些称为断点,适用于方法。它们也可以在执行之前或执行期间随时定义。
基本上,有 3 种方法可以在程序中添加断点:
右键单击该行对应的标记栏(垂直标尺),然后选择 Toggle Breakpoint(如下图所示)
在编辑器中按Ctrl+Shift+B在必要的行上
双击所需行对应的标记栏(垂直标尺)
(3)代码流控制
现在调试器在给定的断点处停止,我们可以继续执行进一步的操作。
让我们假设调试器当前按照下面的屏幕截图在第 16 行定位:
最常用的调试选项是:
Step Into (F5) -此操作进入当前行中使用的方法(如果有);否则,它继续到下一行。在此示例中,它将采用方法isPerfectSquare()中的调试器
Step Over (F6) –此操作处理当前行并进入下一行。在此示例中,这将执行方法isPerfectSquare()并继续执行下一行
Step Return (F7) -此操作完成当前方法并将我们带回调用方法。因为在这种情况下,我们在循环中有一个断点,它仍然在方法中,否则它会回到主方法
Resume (F8)——这个操作将继续执行直到程序结束,除非我们遇到任何进一步的断点
(4)调试视角
当我们在调试模式下启动程序时,Eclipse 会提示选择切换到调试透视图。Debug 透视图是一些有用的视图的集合,可帮助我们可视化调试器并与调试器交互。
我们也可以随时手动切换到 Debug 透视图。
以下是其中包含的一些最有用的视图:
调试视图——这显示了不同的线程和调用堆栈跟踪
变量视图——这显示了任何给定点的变量值。如果我们需要查看静态变量,我们需要明确指定
断点——这显示了不同的断点和观察点(我们将在下面看到)
Debug Shell – 这允许我们在调试时编写和评估自定义代码(稍后会介绍一个示例)
在本节中,我们将介绍一些有助于我们在 Eclipse 中进行调试的重要技术。
(1)变量
我们可以在 Variables 视图下看到执行过程中变量的值。为了查看静态变量,我们可以选择下拉选项Java -> Show Static Variables。
使用变量视图,可以在执行期间将任何值更改为所需值。
例如,如果我们需要跳过一些数字并直接从数字 80 开始,我们可以通过更改变量number的值来实现:
(2)检查值
如果我们需要检查 Java 表达式或语句的值,我们可以在编辑器中选择特定的表达式,右键单击,然后检查,如下所示。一个方便的快捷方式是在表达式上按 Ctrl+Shift+I 以查看值:
如果我们需要永久检查这个表达式,我们可以右键单击并观察。现在,它被添加到 Expressions 视图中,并且可以在不同的运行中看到这个表达式的值。
(3)调试外壳
在调试会话的上下文中,我们可以编写和运行自定义代码来评估可能性。这是在调试外壳中完成的。
例如,如果我们需要交叉检查sqrt功能的正确性,我们可以在 Debug Shell 中进行。在代码上,右键单击 -> Inspect以查看值:
(4)条件断点
在某些情况下,我们只想针对特定条件进行调试。我们可以通过以下两种方式之一向断点添加条件来实现这一点:
右键单击断点并选择断点属性
在断点视图中,选择断点并指定条件
例如,我们可以指定断点,仅当number等于 10 时才暂停执行:
(5)观察点
断点用于方法, 观察点用于类级变量。在当前示例中,evenPerfectSquareNumbers声明上的断点称为观察点。现在,每次在观察点上访问或修改字段时,调试器都会暂停执行。
这是默认行为,可以在观察点的属性中进行更改。
在这个例子中,每次完美平方为偶数时,调试器都会停止执行:
(6)触发点
假设我们正在调试具有大量源代码的应用程序中的复杂问题。由于断点分散,调试器将继续暂停流程。
当一个断点被标记为触发点时,意味着其余的断点只有在这个断点被命中时才会被启用。
例如,在下面的屏幕截图中,isPerfectSquare()上的断点应该在循环中的每次迭代中被命中。但是,我们已将calculateCount()方法上的断点指定为触发点以及条件。
因此,当迭代计数达到 10 时,这将触发其余的断点。因此,从现在开始,如果isPerfectSquare()上的断点被命中,执行将暂停:
(7)远程调试
最后,如果应用程序在 Eclipse 之外运行,我们仍然可以使用上述所有功能,前提是远程应用程序允许调试。在 Eclipse 中,我们将选择Debug 作为 Remote Java Application。
在本快速指南中,我们了解了在 Eclipse IDE 中调试程序的基础知识和不同的技术。
你适合学Java吗?4大专业测评方法
代码逻辑 吸收能力 技术学习能力 综合素质
先测评确定适合在学习