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

> For the complete documentation index, see [llms.txt](https://www.jetbrains.com.cn/help/idea/llms.txt).

您已 [创建并运行](creating-and-running-your-first-java-application.html)了您的 Java 应用程序。 假设发现它的运行方式不符合预期。 例如，它会返回错误的值，或因异常而崩溃。 看起来代码中存在错误，是时候进行调试了。

在本教程中，您将学习如何使用 IntelliJ IDEA 调试器查找并修复 Java 应用程序中的逻辑错误。

将熟悉基本的调试工作流：从设置断点和运行调试会话，到逐步执行代码并分析程序状态。 在此过程中，将熟悉   调试   工具窗口，并学习如何使用变量检查和内联调试来验证程序逻辑。

对于本教程，只需要具备 Java 基础知识。 本教程使用 [Java 25](https://openjdk.org/projects/jdk/25/) 语法。

## 什么是调试？

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

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

但是，有些错误可能很棘手，需要很长时间才能找到并修复。 例如，程序早期出现的细微逻辑错误可能要到很久以后才会显现出来，因此很难理清问题。

这就是  调试器  派上用场的地方。 它是一种工具，可通过洞察程序的内部操作来高效查找错误。 这可以通过在指定点暂停执行、分析程序状态，并在必要时逐步推进执行来实现。 调试时，可以完全掌控一切。 本教程介绍一个基本的调试场景，帮助入门。

## 检查代码

让我们尝试一个简单的调试案例。

Procedure: 创建一个新的项目

1. 启动 IntelliJ IDEA。

在 IntelliJ IDEA 主屏幕上，点击  `新建 | 项目` 。 如果已经打开了项目，请从主菜单中选择  `文件 | 新建项目` 。

2. 在   新建项目   列表中，选择   Java  。 为项目指定一个名称（例如，  `AverageFinder` ）。

3. 选择   Maven   作为   构建系统  。

4. 从    JDK ​   列表中，选择最新可用的 Oracle OpenJDK 版本。

如果 JDK 已安装在您的计算机上，但未在 IDE 中定义，请选择   添加 JDK   并指定 JDK 主目录的路径。

如果您的计算机上没有所需的 JDK，请选择   下载 JDK  。

5. 请选择   添加示例代码  选项。 点击   创建  。

![创建新项目](https://resources.jetbrains.com.cn/help/img/idea/2026.3/debug-first-app-creating-new-project-java.png)

之后，IDE 将为您创建并加载新项目。

Procedure: 编写代码

1. 项目创建后，在   项目  工具窗口（ `Alt+1` (Windows), `⌘ 1` (macOS), `⌘ 1` (IntelliJ IDEA Classic (macOS)), `⌘ 1` (macOS System Shortcuts), `Alt+1` (XWin), `Alt+1` (GNOME), `Alt+1` (KDE), `Alt+1` (Emacs), `Alt+1` (Sublime Text), `⌘ 1` (Sublime Text (macOS)), `Ctrl+Alt+L` (Visual Studio), `⌘ ⌥ L` (Visual Studio (macOS)), `Ctrl+1` (NetBeans), `Alt+1` (Eclipse), `Alt+1` (Eclipse (macOS))）中找到  `src | main | java | org.example | Main.java` 文件，并在编辑器中打开。

2. 将现有代码替换为以下代码示例：

```JAVA
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;
}

```

3. 运行应用程序（ `Shift+F10` (Windows), `⌃ R` (macOS), `⇧ F10` (IntelliJ IDEA Classic (macOS)), `⌥ ⇧ R` (macOS System Shortcuts), `Shift+F10` (XWin), `Shift+F10` (GNOME), `Shift+F10` (KDE), `Shift+F10` (Emacs), `Shift+F10` (Sublime Text), `Shift+F10` (Sublime Text (macOS)), `Ctrl+F5` (Visual Studio), `⌃ F5` (Visual Studio (macOS)), `F6` (NetBeans), `Alt+Shift+X` (Eclipse), `⌘ ⇧ F11` (Eclipse (macOS))）。

现在，有一个程序应计算作为命令行实参传递的所有值的平均值。

程序可以正常编译和运行；但是，结果并不符合预期。 例如，当 [将

1 2 3

作为输入传递](#setting-arguments)时，结果是  `6.0`  而不是  `2.0` 。

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

## 设置断点。设置断点？ no period? Title: 设置断点l?

要调查此错误，需要在程序到达产生错误结果的那段代码时暂停程序。 这是通过设置  断点  来完成的。 断点指示程序将暂停的代码行，以便检查其状态。

Procedure:

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

![在调用 findAverage 方法的行上设置了断点](https://resources.jetbrains.com.cn/help/img/idea/2026.3/debug-first-app-set-breakpoint-java.png)

现在可以在代码行旁边的 [装订区域](editor-gutter.html) 中看到一个红点。 这是一个断点。 当程序到达此行时，IntelliJ IDEA 调试器会暂停其执行，以便检查发生了什么，并确认程序在此处是否正常工作。

## 以调试模式运行程序

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

由于运行和调试程序时需要传递实参，请将它们添加到 [运行/调试配置](null) 中。

Procedure:

1. 点击装订区域中的 ![](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app-client.expui.gutter.run.svg)   运行   图标，然后选择   修改运行配置  。

![装订区域中的运行按钮](https://resources.jetbrains.com.cn/help/img/idea/2026.3/debug-first-app-modify-config-java.png)

2. 在   程序参数   字段中输入  `1 2 3` 。 应用更改并关闭对话框。

![在 Program arguments 字段中输入实参](https://resources.jetbrains.com.cn/help/img/idea/2026.3/debug_tutorial_adding_arguments_java.png)

3. 点击  `main`  方法附近的 ![](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app-client.expui.gutter.run.svg)   运行   按钮。 从菜单中选择   调试  。

![点击装订区域中的运行按钮后，会出现包含运行/调试选项的菜单](https://resources.jetbrains.com.cn/help/img/idea/2026.3/debug_tutorial_debug_java.png)

调试器会话将启动，并使用给定实参执行程序。

## 分析程序状态

调试器会话启动后，程序会正常运行，直到命中断点。 发生这种情况时，IntelliJ IDEA 会暂停程序，高亮显示程序暂停的行，并显示 [调试

工具窗口](debug-tool-window.html)。

![调试工具窗口出现。 带有断点的行被高亮显示](https://resources.jetbrains.com.cn/help/img/idea/2026.3/debug_tutorial_tool_overview_java.png)

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

由于  `findAverage`  方法尚未被调用，其所有局部变量（如  `结果` ）尚未进入作用域，但可以检查  `args`  数组的内容（  `args`  在  `main`  方法的作用域内）。 变量内容会在使用  `args`  的位置内联显示：

![内联调试会在使用相应变量的那一行直接显示变量值](https://resources.jetbrains.com.cn/help/img/idea/2026.3/debug_tutorial_analyzing_java.png)

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

![变量值显示在变量面板中](https://resources.jetbrains.com.cn/help/img/idea/2026.3/debug_tutorial_analyzing_threads_and_variables_panel_java.png)

## 逐步执行程序

既然已经熟悉   调试   工具窗口，现在可以步入  `findAverage`  方法，查看其内部发生了什么。

Procedure:

1. 要步入方法，请点击 ![](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app-client.expui.run.stepInto.svg)   步入   按钮，该按钮位于   调试   工具窗口的工具栏上，或按 `F7` (Windows), `F7` (macOS), `F7` (IntelliJ IDEA Classic (macOS)), `⌘ ;` (macOS System Shortcuts), `F7` (XWin), `F7` (GNOME), `F7` (KDE), `F7` (Emacs), `F7` (Sublime Text), `F7` (Sublime Text (macOS)), `F11` (Visual Studio), `⌘ F11` (Visual Studio (macOS)), `F7` (NetBeans), `F5` (Eclipse), `F5` (Eclipse (macOS))。

![位于调试工具窗口顶部的步入按钮](https://resources.jetbrains.com.cn/help/img/idea/2026.3/debug_tutorial_step_into_java.png)

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

2. 让我们继续步进，看看局部变量  `结果`  是如何声明的，以及它在循环的每次迭代中如何变化。 点击 ![](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app-client.expui.run.stepInto.svg)   步入  ，直到看到变量  `秒`  的值为  `"3"` 。

![内联调试有助于获取变量值信息](https://resources.jetbrains.com.cn/help/img/idea/2026.3/debug_tutorial_step_into_2_java.png)

> **Tip:**
> 如果不小心步进过远，并希望将调试过程返回到程序开头，可以随时使用   调试   工具窗口工具栏上的 ![](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app-client.expui.run.restartDebug.svg)   重新运行   按钮重新运行调试会话。 有关步进过程的更多信息和可能操作，请参阅 [逐步执行程序](stepping-through-the-program.html)。

现在变量  `秒`  包含值  `"3"` 。 它将转换为  Integer  并添加到  `结果` ，后者当前的值为  `3.0` 。 到目前为止没有错误。 总和计算正确。

3. 再执行两步会到达  `return`  语句，这时可以看到遗漏之处。 正在返回  `结果` ，其值为  `6.0` ，但没有将其除以输入数量。 这就是程序输出不正确的原因。

![result 的值按原样返回，不会除以参数的数量](https://resources.jetbrains.com.cn/help/img/idea/2026.3/debug_tutorial_step_into_3_java.png)

> **Tip:**
> 当您完成单步调试并希望正常继续程序执行时，请按 `F9` (Windows), `⌘ ⌥ R` (macOS), `F9` (IntelliJ IDEA Classic (macOS)), `⌃ \` (macOS System Shortcuts), `F9` (XWin), `F9` (GNOME), `F9` (KDE), `F9` (Emacs), `F9` (Sublime Text), `F9` (Sublime Text (macOS)), `F5` (Visual Studio), `F5` (Visual Studio (macOS)), `F5` (NetBeans), `F8` (Eclipse), `F8` (Eclipse (macOS)) 或从主菜单中选择  `运行 | 调试操作 | 恢复程序` 。

4. 让我们更正该错误。 将  `return result;`  行替换为包含正确计算公式的代码：

```JAVA
return result / input.length;

```

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

为检查程序是否正常工作，让我们停止调试器会话并重新运行程序。

Procedure:

1. 在   调试   工具窗口工具栏中，点击 ![](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app-client.expui.run.stop.svg)   停止   或按 `Ctrl+F2` (Windows), `⌘ F2` (macOS), `⌘ F2` (IntelliJ IDEA Classic (macOS)), `⌃ ⇧ .` (macOS System Shortcuts), `Ctrl+F2` (XWin), `Ctrl+F2` (GNOME), `Ctrl+2` (KDE), `Ctrl+F2` (Emacs), `Ctrl+F2` (Sublime Text), `Ctrl+F2` (Sublime Text (macOS)), `Shift+F5` (Visual Studio), `⇧ F5` (Visual Studio (macOS)), `Shift+F5` (NetBeans), `Ctrl+F2` (Eclipse), `⌘ F2` (Eclipse (macOS))。

![使用调试工具窗口左侧的停止按钮停止调试器会话](https://resources.jetbrains.com.cn/help/img/idea/2026.3/debug_tutorial_stopping_debugger_java.png)

2. 点击  `main`  方法附近的 ![](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app-client.expui.gutter.run.svg)   运行   按钮。 从菜单中选择   运行  。

![点击装订区域中的运行按钮后，会出现包含运行/调试选项的菜单](https://resources.jetbrains.com.cn/help/img/idea/2026.3/debug_tutorial_run_2_java.png)

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

![程序现在输出 2.0](https://resources.jetbrains.com.cn/help/img/idea/2026.3/debug_tutorial_verify_java.png)

## 总结

通过本教程，您已经学会了如何：

* 设置断点以检查代码

* 以调试模式运行程序

* 使用调试器分析程序状态

* 逐步执行程序代码以找出错误原因

## 后续步骤

通过这些教程了解如何在 IntelliJ IDEA 中完成其他任务:

* [教程：运行 Java 应用程序](run-java-applications.html)

* [教程：JUnit 入门](junit.html)

* [教程：在 IntelliJ IDEA 中开始使用 Git](working-with-git-tutorial.html)

完整教程列表请参阅 [IntelliJ IDEA 教程](instance-tutorials.html)。

## See also

### 过程

[调试代码](debugging-code.html) [Evaluating Expressions](examining-suspended-program.html#evaluating-expressions) [断点](using-breakpoints.html)

### 参考

[调试器设置](settings-debugger.html)

### 外部链接

[Video tutorials](https://www.jetbrains.com.cn/idea/documentation/video-tutorials.jsp)

