教程:调试您的第一个 Java 应用程序
您已 创建并运行了您的 Java 应用程序。 假设发现它的运行方式不符合预期。 例如,它会返回错误的值,或因异常而崩溃。 看起来代码中存在错误,是时候进行调试了。
在本教程中,您将学习如何使用 IntelliJ IDEA 调试器查找并修复 Java 应用程序中的逻辑错误。
将熟悉基本的调试工作流:从设置断点和运行调试会话,到逐步执行代码并分析程序状态。 在此过程中,将熟悉 调试 工具窗口,并学习如何使用变量检查和内联调试来验证程序逻辑。
对于本教程,只需要具备 Java 基础知识。 本教程使用 Java 25 语法。
什么是调试?
广义而言,调试是检测并纠正程序中错误的过程。
将会处理不同类型的错误。 其中一些错误很容易捕获,例如语法错误,因为编译器会处理它们。 另一种简单情况是,可以通过查看堆栈跟踪快速识别错误,这有助于找出原因。
但是,有些错误可能很棘手,需要很长时间才能找到并修复。 例如,程序早期出现的细微逻辑错误可能要到很久以后才会显现出来,因此很难理清问题。
这就是 调试器 派上用场的地方。 它是一种工具,可通过洞察程序的内部操作来高效查找错误。 这可以通过在指定点暂停执行、分析程序状态,并在必要时逐步推进执行来实现。 调试时,可以完全掌控一切。 本教程介绍一个基本的调试场景,帮助入门。
检查代码
让我们尝试一个简单的调试案例。
创建一个新的项目
启动 IntelliJ IDEA。
在 IntelliJ IDEA 主屏幕上,点击 。 如果已经打开了项目,请从主菜单中选择 。
在 新建项目 列表中,选择 Java。 为项目指定一个名称(例如, AverageFinder )。
选择 Maven 作为 构建系统。
从 JDK 列表中,选择最新可用的 Oracle OpenJDK 版本。
如果 JDK 已安装在您的计算机上,但未在 IDE 中定义,请选择 添加 JDK 并指定 JDK 主目录的路径。
如果您的计算机上没有所需的 JDK,请选择 下载 JDK。
请选择 添加示例代码 选项。 点击 创建。

之后,IDE 将为您创建并加载新项目。
编写代码
项目创建后,在 项目 工具窗口(Alt+1 )中找到 文件,并在编辑器中打开。
将现有代码替换为以下代码示例:
void main(String[] args) { IO.println("Average finder v0.1"); double avg = findAverage(args); IO.println("The average is " + avg); } private static double findAverage(String[] input) { double result = 0; for (String s : input) { result += Integer.parseInt(s); } return result; }运行应用程序(Shift+F10)。
现在,有一个程序应计算作为命令行实参传递的所有值的平均值。
程序可以正常编译和运行;但是,结果并不符合预期。 例如,当 将 1 2 3 作为输入传递时,结果是 6.0 而不是 2.0。
首先,需要思考错误可能来自哪里。 可以假设问题不在 print 语句中。 意外结果很可能来自 findAverage 方法。 为了找出原因,让我们在运行时检查其行为。
设置断点。设置断点? no period? Title: 设置断点l?
要调查此错误,需要在程序到达产生错误结果的那段代码时暂停程序。 这是通过设置 断点 来完成的。 断点指示程序将暂停的代码行,以便检查其状态。
点击
findAverage方法被调用的那行的行号栏。
现在可以在代码行旁边的 装订区域 中看到一个红点。 这是一个断点。 当程序到达此行时,IntelliJ IDEA 调试器会暂停其执行,以便检查发生了什么,并确认程序在此处是否正常工作。
以调试模式运行程序
现在让我们以调试模式启动程序。
由于运行和调试程序时需要传递实参,请将它们添加到 运行/调试配置 中。
点击装订区域中的
运行 图标,然后选择 修改运行配置。

在 程序参数 字段中输入
1 2 3。 应用更改并关闭对话框。
点击
main方法附近的运行 按钮。 从菜单中选择 调试。

调试器会话将启动,并使用给定实参执行程序。
分析程序状态
调试器会话启动后,程序会正常运行,直到命中断点。 发生这种情况时,IntelliJ IDEA 会暂停程序,高亮显示程序暂停的行,并显示 调试 工具窗口。

高亮显示的行尚未执行。 程序现在正在等待进一步指令。 暂停状态允许检查保存程序状态的变量。
由于 findAverage 方法尚未被调用,其所有局部变量(如 结果 )尚未进入作用域,但可以检查 args 数组的内容(args 在 main 方法的作用域内)。 变量内容会在使用 args 的位置内联显示:

还可以在 调试 工具窗口的 线程与变量 选项卡上获取当前处于作用域内的所有变量信息。

逐步执行程序
既然已经熟悉 调试 工具窗口,现在可以步入 findAverage 方法,查看其内部发生了什么。
要步入方法,请点击
步入 按钮,该按钮位于 调试 工具窗口的工具栏上,或按 F7。

编辑器中的高亮显示会移动到另一行,因为执行点向前推进了一步。
让我们继续步进,看看局部变量
结果是如何声明的,以及它在循环的每次迭代中如何变化。 点击步入 ,直到看到变量
秒的值为"3"。
现在变量
秒包含值"3"。 它将转换为 Integer 并添加到结果,后者当前的值为3.0。 到目前为止没有错误。 总和计算正确。再执行两步会到达
return语句,这时可以看到遗漏之处。 正在返回结果,其值为6.0,但没有将其除以输入数量。 这就是程序输出不正确的原因。
让我们更正该错误。 将
return result;行替换为包含正确计算公式的代码:return result / input.length;
停止调试会话并重新运行程序
为检查程序是否正常工作,让我们停止调试器会话并重新运行程序。
在 调试 工具窗口工具栏中,点击
停止 或按 Ctrl+F2。

点击
main方法附近的运行 按钮。 从菜单中选择 运行。

请验证程序现在是否正常运行。

总结
通过本教程,您已经学会了如何:
设置断点以检查代码
以调试模式运行程序
使用调试器分析程序状态
逐步执行程序代码以找出错误原因
后续步骤
通过这些教程了解如何在 IntelliJ IDEA 中完成其他任务:
完整教程列表请参阅 IntelliJ IDEA 教程。