Как выполнить вызовы функции suspend при отладке сопрограмм Kotlin - PullRequest
4 голосов
/ 19 апреля 2019

Как можно отлаживать код Kotlin при входе или выходе из функции «приостановить»?(см. пример ниже).

fun mainFunction() = runBlocking {

    println("before suspend call")

    anotherFunction()

    println("after suspend call")
}

suspend fun anotherFunction() {
    // do something
}

Я понимаю, что сопрограммы Kotlin делают много магии при выполнении функций приостановки и что выполнение может переключать потоки в этот момент.Поэтому при выходе из «anotherFunction ()» я получаю только пошаговый просмотр кода платформы сопрограмм и не могу вернуться к «mainFunction ()».

Однако мне интересно, можно ли отладить это так, как если бы не было сопрограмм.Есть ли инструмент или библиотека, которая включает эту функцию?Это возможно в дорожной карте для совместной поддержки?

Такая простая функция, как флаг компилятора, отключающий магию сопрограмм, уже прошла бы долгий путь, но я ничего не смог найти.

Единственная полезная вещь, которую я нашел, - это: -ea параметр JVM также активирует режим отладки kotlin, который как минимум «исправит» трассировки стека для исключений.

...