IntelliJ IDEA 2025.1 Help

教程:调试您的第一个 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 函数。 为了找到原因,让我们在运行时检查其行为。

设置断点

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

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

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

以调试模式运行程序

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

由于我们将传递参数来运行和调试程序,请确保 run/debug configuration 包含这些参数。

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

    工具栏中的运行按钮
  2. 程序实参 字段中输入 1 2 3

    程序参数字段中输入参数
  3. 请点击 运行 按钮,靠近 main 函数。 请从菜单中选择 调试

    点击边栏中的 Run 按钮后,将显示一个包含运行/调试选项的菜单

分析程序状态

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

调试工具窗口出现。 断点所在的行已突出显示

突出显示的行尚未执行。 该程序现在等待您的进一步指示。 暂停状态允许您检查变量,这些变量保存程序的状态。

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

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

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

变量值显示在 Variables 面板中

逐步执行程序

现在我们已经熟悉了 调试 工具窗口,是时候 步入findAverage 函数并找出其中发生的事情了。

  1. 要进入一个函数,请点击 调试 工具窗口工具栏上的 步入 按钮,或按 F7

    位于 Debug 工具窗口顶部的 Step into 按钮

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

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

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

    此时,变量 包含值 "3"。 它将会被转换为 Int 并添加到 result 中,目前的值为 3.0。 目前没有错误。 总和计算正确。

  3. 再走两步,我们就到达 return 语句,并且我们看到遗漏的地方。 我们返回 result ,其值为 6.0 ,不将其除以输入的数量。 这是造成程序输出不正确的原因。

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

    return result / input.size

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

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

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

    调试器会话已通过位于调试工具窗口左侧的停止按钮停止
  2. 请点击 运行 按钮,靠近 main 函数。 请从菜单中选择 运行

    点击边栏中的 Run 按钮后,将显示一个包含运行/调试选项的菜单
  3. 请验证程序现在是否正常运行。

    该程序现在输出 2.0
最后修改日期: 2025年 4月 24日