使用 IntelliJ IDEA 偵錯協程 – 教學課程
本教學課程示範如何建立 Kotlin 協程並使用 IntelliJ IDEA 偵錯它們。
本教學課程假設您已預先了解協程概念。
建立協程
在 IntelliJ IDEA 中開啟 Kotlin 專案。如果您沒有專案,請建立一個。
若要在 Gradle 專案中使用
kotlinx.coroutines函式庫,請將以下依賴項新增至build.gradle(.kts):kotlindependencies { implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.2") }groovydependencies { implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.2' }對於其他建置系統,請參閱
kotlinx.coroutinesREADME 中的說明。開啟
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()函數的行上設定中斷點:
點擊螢幕頂部執行設定旁邊的 偵錯,以偵錯模式執行程式碼。

偵錯 工具視窗出現:
- 框架 索引標籤包含呼叫堆疊。
- 變數 索引標籤包含目前上下文中的變數。
- 協程 索引標籤包含執行中或已暫停協程的資訊。它顯示有三個協程。 第一個協程的狀態為 執行中,而另外兩個的狀態為 已建立。

點擊 偵錯 工具視窗中的 恢復程式,恢復偵錯程式會話:

現在 協程 索引標籤顯示以下內容:
- 第一個協程的狀態為 已暫停 – 它正在等待值以便進行乘法運算。
- 第二個協程正在計算
a值 – 它的狀態為 執行中。 - 第三個協程的狀態為 已建立,並且沒有計算
b的值。
點擊 偵錯 工具視窗中的 恢復程式,恢復偵錯程式會話:

現在 協程 索引標籤顯示以下內容:
- 第一個協程的狀態為 已暫停 – 它正在等待值以便進行乘法運算。
- 第二個協程已計算出其值並消失了。
- 第三個協程正在計算
b值 – 它的狀態為 執行中。
使用 IntelliJ IDEA 偵錯工具,您可以深入每個協程以偵錯您的程式碼。
經優化移除的變數
如果您使用 suspend 函數,在偵錯工具中,您可能會在變數名稱旁邊看到「was optimized out」文字:

此文字表示變數的生命週期已縮短,並且該變數已不存在。 偵錯帶有優化變數的程式碼很困難,因為您看不到它們的值。 您可以使用 -Xdebug 編譯器選項來禁用此行為。
切勿在生產環境中使用此旗標:
-Xdebug可能導致記憶體洩漏。
