Spec-Zone.ru › Kotlin 2

Отладка Kotlin Flow в IntelliJ IDEA — руководство

В этом руководстве показано, как создать поток Kotlin и отладить его с помощью IntelliJ IDEA.

Предполагается, что вы уже знакомы с понятиями корутин и потоков.

Создание потока Kotlin

Создайте поток Kotlin с медленным эмиттером и медленным сборщиком:

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

  2. Чтобы использовать библиотеку 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.

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

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

  4. Создайте функцию 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)
        }
    }
    
  5. Измените код функции main():

    • Используйте блок runBlocking(), чтобы обернуть корутину.

    • Собирайте передаваемые значения с помощью функции collect().

    • Используйте функцию delay(), чтобы имитировать код, нагружающий процессор. Она приостанавливает корутину на 300 мс, не блокируя поток.

    • Выведите собранное из потока значение с помощью функции println().

    fun main() = runBlocking {
        simple()
            .collect { value ->
                delay(300)
                println(value)
            }
    }
    
  6. Соберите код, нажав Собрать проект.

    Build an application

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

  1. Установите точку останова на строке, где вызывается функция emit():

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

    Build a console application

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

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

    • Вкладка Переменные содержит переменные текущего контекста. Она показывает, что поток передаёт первое значение.

    • Вкладка Корутины содержит сведения о выполняющихся или приостановленных корутинах.

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

    Debug the coroutine

    Теперь поток передаёт второе значение.

    Debug the coroutine

Оптимизированные переменные

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

Variable "a" was optimized out

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

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

Добавление корутины, выполняющейся конкурентно

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

  2. Измените код, чтобы эмиттер и сборщик выполнялись конкурентно:

    • Добавьте вызов функции buffer(), чтобы эмиттер и сборщик выполнялись конкурентно. buffer() сохраняет переданные значения и запускает сборщик потока в отдельной корутине.

    fun main() = runBlocking<Unit> {
        simple()
            .buffer()
            .collect { value ->
                delay(300)
                println(value)
            }
    }
    
  3. Соберите код, нажав Собрать проект.

Отладка потока Kotlin с двумя корутинами

  1. Установите новую точку останова на println(value).

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

    Build a console application

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

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

  3. Возобновите сеанс отладки, нажав Возобновить выполнение программы в окне инструментов Отладка.

    Debugging coroutines

    Теперь у корутины-сборщика статус ВЫПОЛНЯЕТСЯ, а у корутины-эмиттера — ПРИОСТАНОВЛЕНА.

    Чтобы отладить код, можно подробно изучить каждую корутину.

16 июня 2026
Отладка корутин в IntelliJ IDEA — руководствоСериализация

© 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

Spec-Zone.ru

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