Kotlin,Android,如何正确调试协程?

Kir*_*nLy 28 debugging kotlin android-studio kotlin-coroutines

我试图调试我的协程,但放置在挂起函数中的断点不起作用。请帮助我理解为什么。

使用 Android Studio。

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

    viewModelScope.launch(IO) {
        when(val result = interactor.getAllWords()){...}
    }
Run Code Online (Sandbox Code Playgroud)

getAllWords()我写道:

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

        when (val wordsResult = getAllWordsWithoutFiltersApplying()) {}

        ...

        return getWordsWithSelectedPattern()
Run Code Online (Sandbox Code Playgroud)

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

同时,线 val words = mutableListOf<Word>(),当我将断点放在它的行上正在触发。

而且,如果我将一些日志内容放入“untracing”功能中,它们将起作用。我这么说是为了说明,暂停功能有效。断点不是。

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

*截图已添加。看左边有一排图标。为什么我的线路不可用?

在此处输入图片说明

Jef*_* Ma 29

根据您的示例代码,在设置断点时,您可以在MAIN和之间切换协程上下文IO,请确保该suspend选项为ALL

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

如果您使用的是 JetBrain IDE,根据文档,设置断点时要确保suspend选项ALL不是线程。这个对我有用。

在此处输入图片说明

以及更多详细信息,您可以查看文档

在此处输入图片说明

  • 不适用于流程。使用包含 android 依赖项的 co 例程 1.4.0。 (13认同)
  • 非常有帮助的答案..这必须是公认的答案 (2认同)