IntelliJ IDEA 2025.3 Help

教程:调试您的第一个 Java 应用程序

您已 创建并运行了您的 Java 应用程序。 假设您发现它的运行方式并不符合您的预期。 例如,它返回错误的值,或者因异常而崩溃。 看起来您的代码中存在错误,是时候对其进行调试了。

什么是调试?

广义而言,调试是检测并纠正程序中错误的过程。

错误有不同类型,您需要加以处理。 其中一些很容易捕获,例如语法错误,因为编译器会处理它们。 另一个简单的情况是,当通过查看堆栈跟踪可以快速识别错误时,这有助于您找出原因。

但是,也有非常棘手的错误,查找和修复可能需要很长时间。 例如,一个微妙的逻辑错误,可能在程序早期发生,但直到很晚才表现出来,这使得解决问题变得非常具有挑战性。

这就是 调试器的用武之地。 它是一种工具,通过提供对程序内部操作的洞察,以高效的方式帮助您找到错误。 这可以通过在指定点暂停执行、分析程序状态,并在必要时逐步推进执行来实现。 在调试期间,您可以完全掌控一切。 在本指南中,我们将介绍一个基本的调试场景,帮助您入门。

检查代码

让我们尝试一个简单的调试示例。 假设我们有以下应用程序:

public class AverageFinder { public static void main(String[] args) { System.out.println("Average finder v0.1"); double avg = findAverage(args); System.out.println("The average is " + avg); } private static double findAverage(String[] input) { double result = 0; for (String s : input) { result += Integer.parseInt(s); } return result; } }

该程序应计算作为命令行参数传入的所有值的平均值。

它可以正常编译并运行;但是,结果并非如预期。 例如,当我们传递 1 2 3 作为输入时,结果是 6.0

首先,您需要考虑错误可能来自哪里。 我们可以假设问题不在 print 语句中。 很可能,意外结果来自我们的 findAverage 方法。 为找出原因,让我们在运行时检查其行为。

设置断点

为了调查这个错误,我们需要在程序到达产生错误结果的代码片段时暂停程序。 这是通过设置断点来完成的。 断点 用于指示程序将被挂起以便您检查其状态的代码行。

  • 点击 findAverage 方法被调用的那行的行号栏。

    在调用 findAverage 方法的行上设置了一个断点。

以调试模式运行程序

现在让我们以调试模式启动程序。

由于在运行和调试程序时需要传递参数,请确保 运行/调试配置 包含这些参数。

  1. 在装订区域中点击 运行 图标,然后选择 修改运行配置

    装订区域中的运行按钮
  2. 程序参数 字段中输入 1 2 3

    在程序参数字段中输入参数
  3. 点击 main 方法附近的 运行 按钮。 在菜单中选择 调试

    在装订区域中点击运行按钮后,会出现包含运行/调试选项的菜单

分析程序状态

调试会话启动后,程序会正常运行,直到遇到断点。 此时,IntelliJ IDEA会暂停程序,高亮显示程序暂停的那一行,并显示 调试 工具窗口。

调试工具窗口出现。 设置断点的行被高亮显示

高亮显示的行尚未执行。 程序现在正在等待您的进一步指令。 挂起状态允许您检查保存程序状态的变量。

由于 findAverage 方法尚未被调用,其所有局部变量(如 结果 )尚未进入作用域,但我们可以检查 args 数组的内容(argsmain 方法的作用域内)。 变量的内容会内联显示在 args 被使用的地方:

内联调试会在使用相应变量的那一行直接显示变量值

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

变量值会显示在变量面板中

逐步执行程序

现在我们对 调试 工具窗口很熟悉了,是时候 单步调试findAverage 方法,并查看其内部发生了什么。

  1. 要逐步进入方法,请点击 调试 工具窗口工具栏上的 步入 按钮,或按 F7

    调试工具窗口顶部的步入按钮

    编辑器中的高亮显示移动到另一行,因为我们将执行点向前推进了一步。

  2. 让我们继续单步执行,看看局部变量 结果 是如何声明的,以及它在循环的每次迭代中如何发生变化。

    内联调试可帮助我们获取变量值信息

    此时,变量 s 包含的值是 "3"。 它将被转换为 Integer ,并添加到 结果 中,后者当前的值为 3.0。 到目前为止没有错误。 求和计算正确。

  3. 再执行两步,我们就到了 return 语句,并且看到了遗漏之处。 我们在返回 结果 (其值为 6.0 )时,没有将其除以参数的数量。 这就是程序输出不正确的原因。

    result 的值按原样返回,不会除以参数的数量
  4. 让我们更正该错误:

    return result / input.length;

停止调试会话并重新运行程序

为检查程序是否正常工作,先停止调试会话并重新运行程序。

  1. 调试 工具窗口的工具栏中,点击 停止 按钮,或按下 Ctrl+F2

    使用调试工具窗口左侧的停止按钮停止调试会话
  2. 点击 main 方法附近的 运行 按钮。 在菜单中选择 运行

    在装订区域中点击运行按钮后,会出现包含运行/调试选项的菜单
  3. 请验证程序现在是否正常运行。

    程序现在输出 2.0。
2026年 1月 23日