如何在从Android Studio运行Android应用程序时启用协程调试模式?

6

我在通过Android Studio在debug模式下运行我的Android应用程序时,遇到了协程异常。

kotlinx.coroutines.JobCancellationException: StandaloneCoroutine被取消

协程调试文档中可以看出,启用 协程的debug模式 可以获取更完整的堆栈跟踪信息。

可以通过设置系统属性DEBUG_PROPERTY_NAME或使用已启用断言的Java(-ea标志)来启用它。

这就是我卡住的地方。在Android Studio中实现这一点的惯用方法是什么?我的项目使用Gradle进行配置,并在Windows上运行。理想情况下,通过Gradle配置进行此项设置,以便任何通过源代码控制获取此项目的人都可以启用协程的debug模式。

2个回答

4

我尚未找到通过Android Studio或Gradle进行配置的方法。对于如何进行配置的信息仍然对我有用。但是,以下已经被验证可以使用;我得到了完整的堆栈跟踪。

"系统属性"指的是Java系统属性。它们可以使用System.setProperty在运行时设置。

因此,在我的Application.onCreate()的开头,我添加了以下代码。

override fun onCreate() {
    // Enable coroutines debug mode in debug builds.
    if (BuildConfig.DEBUG) {
        System.setProperty(
            kotlinx.coroutines.DEBUG_PROPERTY_NAME,
            kotlinx.coroutines.DEBUG_PROPERTY_VALUE_ON
        )
    }

    ...

}

最好将此代码放在静态初始化器块中运行,以在 ContentProviders 和 androidx.startup.Initializers 之前执行。 - Uli

1

目前,Android Studio不支持协程调试。

虽然在2021年曾经添加过,但由于性能问题而被移除。这里是跟踪错误

还有一些来自kotlinx-coroutines-debug项目的额外信息:

Android运行时不支持kotlinx-coroutines-debug所需的Instrument API,会触发java.lang.NoClassDefFoundError: Failed resolution of: Ljava/lang/management/ManagementFactory;,因此无法在Android模拟器中使用协程调试器。

来源:https://github.com/Kotlin/kotlinx.coroutines/tree/master/kotlinx-coroutines-debug#debug-agent-and-android


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接