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()ブロックを使用します。 - 遅延値
aとbを計算するコルーチンを作成するために、async()関数を使用します。 - 計算結果を待機するために、
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()}") }- コルーチンをラップするために、
Build Project をクリックしてコードをビルドします。

コルーチンのデバッグ
println()関数呼び出しのある行にブレークポイントを設定します。
画面上部の実行構成の横にある Debug をクリックして、デバッグモードでコードを実行します。

Debug ツールウィンドウが表示されます。
- Frames タブには、コールスタックが含まれています。
- Variables タブには、現在のコンテキストの変数が含まれています。
- Coroutines タブには、実行中または中断中のコルーチンに関する情報が含まれています。ここには3つのコルーチンが表示されています。 最初のコルーチンは RUNNING ステータスで、他の2つは CREATED ステータスです。

Debug ツールウィンドウで Resume Program をクリックしてデバッガーセッションを再開します。

現在、Coroutines タブには次のように表示されます。
- 最初のコルーチンは SUSPENDED ステータスです – 値を乗算するために待機しています。
- 2番目のコルーチンは
aの値を計算しており、RUNNING ステータスです。 - 3番目のコルーチンは CREATED ステータスで、
bの値は計算していません。
Debug ツールウィンドウで Resume Program をクリックしてデバッガーセッションを再開します。

現在、Coroutines タブには次のように表示されます。
- 最初のコルーチンは SUSPENDED ステータスです – 値を乗算するために待機しています。
- 2番目のコルーチンは値を計算し終え、表示されなくなりました。
- 3番目のコルーチンは
bの値を計算しており、RUNNING ステータスです。
IntelliJ IDEA デバッガーを使用すると、各コルーチンを深く掘り下げてコードをデバッグできます。
最適化によって除外された変数
suspend 関数を使用している場合、デバッガーで変数の名前の横に「was optimized out」というテキストが表示されることがあります。

このテキストは、変数の寿命が短縮され、変数がもはや存在しないことを意味します。 最適化された変数を含むコードは、その値が見えないためデバッグが困難です。 この動作は、-Xdebug コンパイラオプションで無効にできます。
本番環境でこのフラグを絶対に使用しないでください:
-Xdebugはメモリリークを引き起こす可能性があります。
