在 Android 中调试 Kotlins 协程

Debug Kotlins coroutines in Android

提问人:NullPointer 提问时间:6/21/2018 最后编辑:KushalNullPointer 更新时间:11/14/2022 访问量:4591

问:

是否可以在 Android 中调试协程?当我尝试调试此代码片段时:

runBlocking {
        try {
            async(CommonPool) {
                showLoadingIndicator()
                val a = loadData().await()
                hideLoadingIndicator()
            }
        } catch (e: Exception) {
            Log.e("lala", "exception " + e.toString())
        }
}

val a具有以下消息:Cannot find local variable: name = a

在我的应用程序中,我设置了协程调试的属性,如下所示:

System.setProperty("kotlinx.coroutines.debug", if (BuildConfig.DEBUG) "on" else "off")

还是不行。现在我不知道在使用协程时如何使用调试器。 你们可以帮帮我吗?

提前致谢

阿尔班

Android 调试 kotlin-coroutines

评论

1赞 Renato Stauffer 6/21/2018
有同样的问题......有人可以帮忙吗?
0赞 Roman Elizarov 6/21/2018
youtrack.jetbrains.com/issue/KT-22296
1赞 NullPointer 6/21/2018
@RomanElizarov你认为 IntelliJ 会很快解决这个问题吗?你得到他们的回应了吗?
1赞 Roman Elizarov 6/23/2018
事实证明,这是一个单独的错误。更小的情况:youtrack.jetbrains.com/issue/KT-25076
2赞 Gustavo Pagani 9/22/2020
关于 android 不支持,请参阅 Debug agent 和 Androidkotlinx.coroutines.debug

答:

-1赞 Gergely Hegedus 2/16/2022 #1

我通常会添加一行,这样如果我停在那里,就需要在那里,这样我就可以验证它的值。System.err.println(a)a

不是真正可扩展的,但对于调试来说,它对我有用。

0赞 AndroidEngineX 11/14/2022 #2

我倾向于不在该点添加调试点,因为那是更改代码的地方。相反,在某个 lambda 中添加调试器,可能在 内部或内部。suspendcoroutinecoroutineScopesuspend fun

此外,您还可以在 android 或 Java 项目中添加,以获取有关代码执行的一些信息。Log.d("CoroutineDebug", "your message")println

顺便说一句,https://youtrack.jetbrains.com/issue/KT-22296https://youtrack.jetbrains.com/issue/KT-25076 的问题已经关闭。因此,您将能够在调试时轻松评估变量