Отладка корутин с помощью IntelliJ IDEA — руководство
Это руководство демонстрирует, как создать Kotlin корутины и отлаживать их с помощью IntelliJ IDEA.
Руководство предполагает, что у вас есть предварительные знания о концепции корутин.
Создание корутин
Откройте Kotlin проект в IntelliJ IDEA. Если у вас нет проекта, создайте его.
-
Для использования библиотеки
kotlinx.coroutinesв проекте Gradle добавьте следующую зависимость вbuild.gradle(.kts):dependencies { implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1") }dependencies { implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1' }Для других систем сборки см. инструкции в
kotlinx.coroutinesREADME. -
Откройте файл
Main.ktвsrc/main/kotlin.Директория
srcсодержит Kotlin исходные файлы и ресурсы. ФайлMain.ktсодержит пример кода, который будет выводитьHello World!. -
Измените код в функции
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()}") } -
Соберите код, нажав Собрать проект.
Отладка корутин
-
Установите точки останова в строках с вызовом функции
println(): -
Запустите код в режиме отладки, нажав Отладка рядом с конфигурацией запуска в верхней части экрана.
Открывается окно Отладка:
Вкладка Фреймы содержит стек вызовов.
Вкладка Переменные содержит переменные в текущем контексте.
Вкладка Корутины содержит информацию о работающих или приостановленных корутинах. Она показывает, что есть три корутины. Первая имеет статус ВЫПОЛНЯЕТСЯ, а другие две — статус СОЗДАНА.

-
Возобновите сеанс отладки, нажав Продолжить выполнение в окне Отладка:

Теперь вкладка Корутины отображает следующее:
Первая корутина имеет статус ПРИОСТАНОВЛЕНА — она ожидает значений, чтобы их можно было перемножить.
Вторая корутина вычисляет значение
a— у нее статус ВЫПОЛНЯЕТСЯ.Третья корутина имеет статус СОЗДАНА и не вычисляет значение
b.
-
Возобновите сеанс отладки, нажав Продолжить выполнение в окне Отладка:

Теперь вкладка Корутины показывает следующее:
Первая корутина имеет статус ПРИОСТАНОВЛЕНА — она ожидает значений, чтобы их можно было перемножить.
Вторая корутина вычислила свое значение и исчезла.
Третья корутина вычисляет значение
b— у нее статус ВЫПОЛНЯЕТСЯ.
Используя отладчик IntelliJ IDEA, вы можете глубже погрузиться в каждую корутину для отладки своего кода.
Переменные, исключенные из оптимизации
Если вы используете функции suspend, в отладчике вы можете увидеть текст "были исключены из оптимизации" рядом с именем переменной:
Этот текст означает, что срок жизни переменной был уменьшен, и переменная больше не существует. Отладка кода с оптимизированными переменными затруднена, поскольку вы не видите их значений. Вы можете отключить это поведение с помощью параметра компилятора -Xdebug.
© 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