Spec-Zone.ru › Kotlin 1.8

Отладка корутин с помощью IntelliJ IDEA – учебник

Этот учебник демонстрирует, как создавать Kotlin-корутины и отлаживать их с помощью IntelliJ IDEA.

Для этого учебника предполагается, что вы уже знакомы с концепцией корутин.

Создание корутин

  1. Откройте Kotlin-проект в IntelliJ IDEA. Если у вас нет проекта, создайте его.

  2. Чтобы использовать библиотеку kotlinx.coroutines в проекте Gradle, добавьте следующую зависимость в build.gradle(.kts):

    dependencies {
        implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4")
    }
    
    dependencies {
        implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4'
    }
    

    Для других систем сборки см. инструкции в kotlinx.coroutines README.

  3. Откройте файл Main.kt в src/main/kotlin.

    Папка src содержит Kotlin-исходные файлы и ресурсы. Файл Main.kt содержит пример кода, который выведет Hello World!.

  4. Измените код в функции main():

    • Используйте блок runBlocking() для обертывания корутины.

    • Используйте функцию async() для создания корутин, которые вычисляют отложенные значения a и b.

    • Используйте функцию 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()}")
    }
    
  5. Соберите код, нажав Собрать проект.

    Build an application

Отладка корутин

  1. Установите точки останова в строках с вызовом функции println():

    Build a console application
  2. Запустите код в режиме отладки, нажав Отладка рядом с конфигурацией запуска в верхней части экрана.

    Build a console application

    Открывается окно инструментов Отладка:

    • Вкладка Фреймы содержит стек вызовов.

    • Вкладка Переменные содержит переменные в текущем контексте.

    • Вкладка Корутины содержит информацию о работающих или приостановленных корутинах. Видно, что есть три корутины. Первая имеет статус ЗАПУЩЕНА, а другие две — СОЗДАНЫ.

    Debug the coroutine
  3. Продолжите сеанс отладки, нажав Продолжить выполнение программы в окне инструментов Отладка:

    Debug the coroutine

    Теперь вкладка Корутины показывает следующее:

    • Первая корутина имеет статус ПРИОСТАНОВЛЕНА — она ожидает значения для их умножения.

    • Вторая корутина вычисляет значение a — у неё статус ЗАПУЩЕНА.

    • Третья корутина имеет статус СОЗДАНА и не вычисляет значение b.

  4. Продолжите сеанс отладки, нажав Продолжить выполнение программы в окне инструментов Отладка:

    Build a console application

    Теперь вкладка Корутины показывает следующее:

    • Первая корутина имеет статус ПРИОСТАНОВЛЕНА — она ожидает значения для их умножения.

    • Вторая корутина вычислила своё значение и исчезла.

    • Третья корутина вычисляет значение b — у неё статус ЗАПУЩЕНА.

С помощью отладчика IntelliJ IDEA вы можете более глубоко изучить каждую корутину для отладки своего кода.

Переменные, исключённые из оптимизации

Если вы используете suspend функции, в отладчике вы можете увидеть текст «был исключён из оптимизации» рядом с именем переменной:

Variable "a" was optimized out

Этот текст означает, что срок жизни переменной был сокращён, и переменная больше не существует. Отладка кода с оптимизированными переменными затруднена, поскольку вы не видите их значений. Вы можете отключить это поведение с помощью опции компилятора -Xdebug.

Никогда не используйте этот флаг в продакшене: -Xdebug может вызвать утечки памяти.

Последнее изменение: 10 января 2023
Выбрать выражение (экспериментально) Отладка Kotlin Flow с помощью IntelliJ IDEA – учебник

© 2010–2023 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/debug-coroutines-with-idea.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API