Отладка Kotlin Flow в IntelliJ IDEA — руководство
В этом руководстве показано, как создать поток Kotlin и отладить его с помощью IntelliJ IDEA.
Предполагается, что вы уже знакомы с понятиями корутин и потоков.
Создание потока Kotlin
Создайте поток Kotlin с медленным эмиттером и медленным сборщиком:
Откройте проект Kotlin в IntelliJ IDEA. Если у вас нет проекта, создайте его.
-
Чтобы использовать библиотеку
kotlinx.coroutinesв проекте Gradle, добавьте вbuild.gradle(.kts)следующую зависимость:dependencies { implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.11.0") }dependencies { implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.11.0' }Инструкции для других систем сборки см. в файле README библиотеки
kotlinx.coroutines. -
Откройте файл
Main.ktвsrc/main/kotlin.Каталог
srcсодержит исходные файлы Kotlin и ресурсы. ФайлMain.ktсодержит пример кода, который выводитHello World!. -
Создайте функцию
simple(), которая возвращает поток из трёх чисел:Используйте функцию
delay(), чтобы имитировать блокирующий код, нагружающий процессор. Она приостанавливает корутину на 100 мс, не блокируя поток.Создавайте значения в цикле
forс помощью функцииemit().
import kotlinx.coroutines.* import kotlinx.coroutines.flow.* import kotlin.system.* fun simple(): Flow<Int> = flow { for (i in 1..3) { delay(100) emit(i) } } -
Измените код функции
main():Используйте блок
runBlocking(), чтобы обернуть корутину.Собирайте передаваемые значения с помощью функции
collect().Используйте функцию
delay(), чтобы имитировать код, нагружающий процессор. Она приостанавливает корутину на 300 мс, не блокируя поток.Выведите собранное из потока значение с помощью функции
println().
fun main() = runBlocking { simple() .collect { value -> delay(300) println(value) } } -
Соберите код, нажав Собрать проект.
Отладка корутины
-
Установите точку останова на строке, где вызывается функция
emit(): -
Запустите код в режиме отладки, нажав Отладка рядом с конфигурацией запуска в верхней части экрана.
Откроется окно инструментов Отладка:
Вкладка Кадры содержит стек вызовов.
Вкладка Переменные содержит переменные текущего контекста. Она показывает, что поток передаёт первое значение.
Вкладка Корутины содержит сведения о выполняющихся или приостановленных корутинах.

-
Возобновите сеанс отладки, нажав Возобновить выполнение программы в окне инструментов Отладка. Программа остановится на той же точке останова.
Теперь поток передаёт второе значение.

Оптимизированные переменные
Если вы используете функции suspend, рядом с именем переменной в отладчике может отображаться текст «was optimized out»:
Этот текст означает, что время жизни переменной было сокращено и переменная больше не существует. Отлаживать код с оптимизированными переменными сложно, поскольку их значения не отображаются. Это поведение можно отключить с помощью параметра компилятора -Xdebug.
Добавление корутины, выполняющейся конкурентно
Откройте файл
Main.ktвsrc/main/kotlin.-
Измените код, чтобы эмиттер и сборщик выполнялись конкурентно:
Добавьте вызов функции
buffer(), чтобы эмиттер и сборщик выполнялись конкурентно.buffer()сохраняет переданные значения и запускает сборщик потока в отдельной корутине.
fun main() = runBlocking<Unit> { simple() .buffer() .collect { value -> delay(300) println(value) } } Соберите код, нажав Собрать проект.
Отладка потока Kotlin с двумя корутинами
Установите новую точку останова на
println(value).-
Запустите код в режиме отладки, нажав Отладка рядом с конфигурацией запуска в верхней части экрана.

Откроется окно инструментов Отладка.
На вкладке Корутины видно, что конкурентно выполняются две корутины. Сборщик и эмиттер потока выполняются в отдельных корутинах благодаря функции
buffer(). Функцияbuffer()буферизует значения, переданные потоком. У корутины-эмиттера статус ВЫПОЛНЯЕТСЯ, а у корутины-сборщика — ПРИОСТАНОВЛЕНА. -
Возобновите сеанс отладки, нажав Возобновить выполнение программы в окне инструментов Отладка.

Теперь у корутины-сборщика статус ВЫПОЛНЯЕТСЯ, а у корутины-эмиттера — ПРИОСТАНОВЛЕНА.
Чтобы отладить код, можно подробно изучить каждую корутину.
© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/debug-flow-with-idea.html