【问题标题】:Kotlin, Android, how to debug coroutines correctly?Kotlin,Android,如何正确调试协程?
【发布时间】:2020-04-08 05:32:49
【问题描述】:

我正在尝试调试我的协程,但放置在挂起函数中的断点不起作用。请帮助我理解原因。

使用 Android Studio。

好的,我从 viewModelScope 启动一个协程:

    viewModelScope.launch(IO) {
        when(val result = interactor.getAllWords()){...}
    }

getAllWords()我写道:

    override suspend fun getAllWords(): WordResult {
        val words = mutableListOf<Word>()

        when (val wordsResult = getAllWordsWithoutFiltersApplying()) {}

        ...

        return getWordsWithSelectedPattern()

我有两个挂起函数:getAllWordsWithoutFiltersApplying()getWordsWithSelectedPattern()。我对它们都有一个断点,但它们没有在调试模式下触发。

同时,val words = mutableListOf&lt;Word&gt;() 行正在触发,当我在其行设置断点时。

而且,如果我将一些日志内容放入“取消跟踪”功能,它们就会起作用。我这么说是为了说明,挂起功能有效。断点不是。

我应该怎么做才能调试它们?

*已添加屏幕截图。查看左侧的图标行。为什么我的线路不可用?

【问题讨论】:

  • 可以发getAllWordsWithoutFiltersApplying()的全文吗?

标签: android-studio debugging kotlin kotlin-coroutines


【解决方案1】:

我忘记在我的build.gradle 文件中将minifyEnabled 设置为true

  buildTypes {
    release {
      minifyEnabled true
    }
    debug {
      minifyEnabled true <- Should be false for these breakpoints to work
    }
  }

【讨论】:

    【解决方案2】:

    它仍然对我不起作用,因为我先运行应用程序然后附加调试器,但是当我改用 debug 时,它起作用了。

    【讨论】:

      【解决方案3】:

      根据您的示例代码,您在MAINIO 之间切换协程上下文,因此在设置断点时,请确保suspend 选项为ALL

      显示断点的选项。用鼠标左键设置断点,然后在断点上右击鼠标。

      如果你使用的是JetBrain IDE,根据document,设置断点的时候要确保suspend选项是ALL不是线程。它对我有用。

      更多详情您可以查看document

      【讨论】:

      • 非常有帮助的答案..这一定是公认的答案
      • 不适用于流。使用包含 android 依赖项的 coroutines 1.4.0。
      【解决方案4】:

      我知道我迟到了,但这是为那些像我一样犯过类似错误的人准备的。我最近也遇到了这个问题,根本原因与依赖关系有关。实际上我添加了协程核心依赖,但我忘记添加协程android依赖。请确保两个依赖项都存在于您的 gradle 文件中,如下所示。

      implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.4"
      implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.4'
      

      【讨论】:

      • 据我所知 kotlinx-coroutines-android 仅包含 Main 调度程序。它对调试有什么帮助?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-16
      • 2019-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-17
      相关资源
      最近更新 更多