教程:调试您的第一个 Kotlin 应用程序
您已经 创建并运行了您的 Kotlin 应用程序。 假设发现它的运行方式不符合预期。 例如,它会返回错误的值,或因异常而崩溃。 看起来代码中存在错误,是时候进行调试了。
什么是调试?
广义而言,调试是检测并纠正程序中错误的过程。
将会处理不同类型的错误。 其中一些错误很容易捕获,例如语法错误,因为编译器会处理它们。 另一种简单情况是,可以通过查看堆栈跟踪快速识别错误,这有助于找出原因。
但是,有些错误可能很棘手,需要很长时间才能找到并修复。 例如,程序早期出现的细微逻辑错误可能要到很久以后才会显现出来,因此很难理清问题。
这就是 调试器 派上用场的地方。 它是一种工具,可通过洞察程序的内部操作来高效查找错误。 这可以通过在指定点暂停执行、分析程序状态,并在必要时逐步推进执行来实现。 调试时,可以完全掌控一切。 本教程介绍一个基本的调试场景,帮助入门。
检查代码
让我们尝试一个简单的调试案例。 假设我们有以下应用程序:
该程序应计算作为命令行实参传入的所有值的平均值。
可以编译并运行且没有问题;但是,结果并不符合预期。 例如,当我们传递 1 2 3 作为输入时,结果是 6.0。
首先,需要思考错误可能来自哪里。 我们可以假设问题不在 print 语句中。 很可能,意外结果来自于我们的 findAverage 函数。 为了找出原因,让我们在运行时检查其行为。
设置断点。设置断点? no period? Title: 设置断点l?
要调查此错误,需要在程序到达产生错误结果的那段代码时暂停程序。 这是通过设置 断点 来完成的。 断点指示程序将暂停的代码行,以便检查其状态。
点击
findAverage函数被调用的行的边距。
以调试模式运行程序
现在让我们以调试模式启动程序。
由于运行和调试程序时需要传递实参,请将它们添加到 运行/调试配置 中。
点击装订区域中的
运行 图标,然后选择 修改运行配置。

在 程序参数 字段中输入
1 2 3。 应用更改并关闭对话框。
点击
运行 按钮,该按钮位于
main函数/方法旁。 从菜单中选择 调试。
调试器会话将启动,并使用给定实参执行程序。
分析程序状态
调试器会话启动后,程序会正常运行,直到命中断点。 发生这种情况时,IntelliJ IDEA 会暂停程序,高亮显示程序暂停的行,并显示 调试 工具窗口。

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

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

逐步执行程序
既然已经熟悉 调试 工具窗口,现在是时候步入 findAverage 函数/方法并了解其内部发生的情况了。
要步入函数/方法,请点击
步入 按钮,该按钮位于 调试 工具窗口的工具栏上,或按 F7。

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

点击
运行 按钮,该按钮位于
main函数/方法旁。 从菜单中选择 运行。
请验证程序现在是否正常运行。
