LoginSignup
0
0

More than 1 year has passed since last update.

【Coroutinesガイド】IntelliJ IDEAを使ったコルーチンのデバッグ - チュートリアル

Posted at

※ソース記事はこちら
このチュートリアルでは、Kotlinコルーチンを作りIntelliJ IDEAを使ってデバッグする方法をデモする。
チュートリアルは、事前にコルーチンの概要の知識があることを想定している。

デバッグはkotlinx-coroutines-coreバージョン1.3.8以上で動作する。

コルーチンの作成

  1. IntelliJ IDEAでKotlinプロジェクトを開く。無い場合は一つ作成する。
  2. src/main/kotlin内のmain.ktを開く。
    srcディレクトリには、Kotlinソースとリソースが含まれる。main.ktファイルにはHello World!を出力するサンプルコードが含まれている。
  3. main関数内のコードを変更する。
    • コルーチンをラップするためにrunBlockingブロックを使う。
    • deferred値のabを計算するコルーチンを作るため、async関数を使う。
    • 計算結果を待つためにawait関数を使う。
    • アウトプットに計算状態と掛け算の結果を出力するため、println関数を使う。
    import 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()}")
    }
    
  4. プロジェクトのビルドをクリックしてこのコードをビルドする。
    imgc1

コルーチンのデバッグ

  1. println()関数呼びだしを持つ行にブレークポイントを設定する。
    imgd1
  2. 画面の上にある実行構成のとなりのデバッグをクリックすることで、デバッグモードでコードを実行する。
    imgd2
    デバッグツールウィンドウが表示される。
    • フレームタブにはコールスタックが含まれる。
    • 変数タブには現在のコンテキストの変数が含まれる。
    • コルーチンタブには、実行中か一時停止中のコルーチンに対する情報が含まれる。3つのコルーチンがあることが見えている。最初のものはRUNNING状態を持ち、他の二つのものは、CREATED状態を持っている。
      imgd3
  3. デバッグツールウィンドウの再開をクリックすることで、デバッグセッションを再開する。
    現在コルーチンタブには次のものが見えている。
    • 最初のコルーチンはSUSPENDED状態であり、掛け算をするために値を待っている。
    • 二つめのコルーチンはaの値を計算している。RUNNING状態を持つ。
    • 三つめのコルーチンはCREATED状態を持ち、bの値を計算していない。
  4. デバッグツールウィンドウの再開をクリックすることで、デバッグセッションを再開する。
    現在コルーチンタブには次のものが見えている。
    • 最初のコルーチンはSUSPENDED状態であり、掛け算をするために値を待っている。
    • 二つめのコルーチンは値を計算し消えている。
    • 三つめのコルーチンはbの値を計算しており、RUNNING状態を持つ。

IntelliJ IDEAのデバッガーを使うことで、自分のコードをデバッグするためにそれぞれのコルーチンを詳しく調べることができる。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0