使用 IntelliJ IDEA 调试协程 – 教程
本教程演示了如何创建 Kotlin 协程并使用 IntelliJ IDEA 调试它们。
本教程假定你已对协程概念有预备知识。
创建协程
- 在 IntelliJ IDEA 中打开一个 Kotlin 项目。如果你没有项目,请创建一个。
- 要在 Gradle 项目中使用
kotlinx.coroutines库,请将以下依赖项添加到build.gradle(.kts)中:
kotlin
dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.2")
}groovy
dependencies {
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.2'
}对于其他构建系统,请参阅 kotlinx.coroutines README 中的说明。
打开
src/main/kotlin目录中的Main.kt文件。src目录包含 Kotlin 源文件和资源。Main.kt文件包含将打印Hello World!的示例代码。更改
main()函数中的代码:- 使用
runBlocking()代码块来包裹一个协程。 - 使用
async()函数创建计算延迟值a和b的协程。 - 使用
await()函数等待计算结果。 - 使用
println()函数向输出打印计算状态和乘法结果。
kotlinimport kotlinx.coroutines.* fun main() = runBlocking<Unit> { val a = async { println("I'm computing part of the answer") 6 } val b = async { println("I'm computing another part of the answer") 7 } println("The answer is ${a.await() * b.await()}") }- 使用
通过点击 构建项目 来构建代码。

调试协程
在
println()函数调用的行上设置断点:
通过点击屏幕顶部运行配置旁边的 调试 来在调试模式下运行代码。

调试 工具窗口出现:
- 帧 选项卡包含调用栈。
- 变量 选项卡包含当前上下文中的变量。
- 协程 选项卡包含运行中或挂起中的协程的信息。它显示有三个协程。 第一个协程处于 RUNNING (运行中) 状态,另外两个处于 CREATED (已创建) 状态。

通过点击 调试 工具窗口中的 恢复程序 来恢复调试器会话:

现在 协程 选项卡显示以下内容:
- 第一个协程处于 SUSPENDED (挂起) 状态 – 它正在等待这些值以便它可以将它们相乘。
- 第二个协程正在计算
a值 – 它处于 RUNNING (运行中) 状态。 - 第三个协程处于 CREATED (已创建) 状态,并且没有计算
b值。
通过点击 调试 工具窗口中的 恢复程序 来恢复调试器会话:

现在 协程 选项卡显示以下内容:
- 第一个协程处于 SUSPENDED (挂起) 状态 – 它正在等待这些值以便它可以将它们相乘。
- 第二个协程已经计算出其值并消失了。
- 第三个协程正在计算
b值 – 它处于 RUNNING (运行中) 状态。
使用 IntelliJ IDEA 调试器,你可以深入探查每个协程以调试你的代码。
被优化掉的变量
如果你使用 suspend 函数,在调试器中,你可能会在变量名旁边看到“was optimized out”文本:

此文本意味着变量的生命周期被缩短,并且该变量不再存在了。 调试含有被优化掉的变量的代码是困难的,因为你无法看到它们的值。 你可以通过 -Xdebug 编译器选项禁用此行为。
切勿在生产环境中使用此标志:
-Xdebug可能导致内存泄漏。
