【发布时间】:2019-09-09 21:16:36
【问题描述】:
如何在进入或退出“暂停”函数时调试 Kotlin 代码? (见下面的例子)。
fun mainFunction() = runBlocking {
println("before suspend call")
anotherFunction()
println("after suspend call")
}
suspend fun anotherFunction() {
// do something
}
我知道 Kotlin 协程在执行挂起函数时会发挥很大的作用,并且执行时可能会切换线程。因此,当退出“anotherFunction()”时,我只能单步执行协程框架代码,无法返回“mainFunction()”。
但是,我想知道是否可以像不涉及协程一样进行调试。是否有启用此功能的工具或库?它可能在协同例程支持的路线图上吗?
像禁用协程魔法的编译器标志这样简单的功能已经有很长的路要走,但我找不到任何东西。
我发现唯一有用的是:-ea JVM 参数还激活了 kotlin 调试模式,该模式至少会“修复”异常堆栈跟踪。
【问题讨论】:
-
你好。一般来说,你是对的——目前很难调试协程代码。我们正朝着这个方向积极努力,例如在 Kotlin 1.3.30 中,我们提供了异步堆栈跟踪支持:blog.jetbrains.com/kotlin/2019/04/kotlin-1-3-30-released 我未能在这个特定示例中重现问题(Gradle 项目,IDEA 2019.2 EAP + Kotlin 1.3.40-eap -32):从
anotherFunction“跳出”直接到main。如果它仍然不适合您,请在kotl.in/issue 提出问题并附上示例代码以进行重现。谢谢。
标签: debugging kotlin kotlin-coroutines