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

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

> **TL;DR**
> 必需插件：   Kotlin  （捆绑）

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

## 什么是调试？

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

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

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

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

## 检查代码

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

```KOTLIN
fun main(args: Array<String>) {
    println("Average finder v0.1")
    val avg = findAverage(args)
    println("The average is $avg")
}

fun findAverage(input: Array<String>): Double {
    var result = 0.0
    for (s in input) {
        result += s.toDouble()
    }
    return result
}

```

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

可以编译并运行且没有问题；但是，结果并不符合预期。 例如，当我们传递  `1 2 3` 作为输入时，结果是  `6.0` 。

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

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

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

Procedure:

* 点击  `findAverage`  函数被调用的行的边距。

![在调用 findAverage 方法的行上设置了断点](https://resources.jetbrains.com/help/img/idea/2026.3/debug_tutorial_setting_breakpoint_kotlin.png)

## 以调试模式运行程序

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

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

Procedure:

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

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

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

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

3. 点击 ![](https://resources.jetbrains.com/help/img/idea/2026.3/app-client.expui.gutter.run.svg)   运行   按钮，该按钮位于  `main`  函数／方法旁。 从菜单中选择   调试  。

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

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

## 分析程序状态

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

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

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

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

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

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

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

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

## 逐步执行程序

既然已经熟悉   调试   工具窗口，现在是时候步入  `findAverage`  函数／方法并了解其内部发生的情况了。

Procedure:

1. 要步入函数／方法，请点击 ![](https://resources.jetbrains.com/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/help/img/idea/2026.3/debug_tutorial_step_into_kotlin.png)

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

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

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

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

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

![result 的值按原样返回，不会除以参数的数量](https://resources.jetbrains.com/help/img/idea/2026.3/debug_tutorial_step_into_3_kotlin.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`  行替换为包含正确计算公式的代码：

```KOTLIN
return result / input.size

```

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

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

Procedure:

1. 在   调试   工具窗口工具栏中，点击 ![](https://resources.jetbrains.com/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/help/img/idea/2026.3/debug_tutorial_stopping_debugger_kotlin.png)

2. 点击 ![](https://resources.jetbrains.com/help/img/idea/2026.3/app-client.expui.gutter.run.svg)   运行   按钮，该按钮位于  `main`  函数／方法旁。 从菜单中选择   运行  。

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

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

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

