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

时间:2019-12-15 14:50:18

标签: android-studio debugging kotlin kotlin-coroutines

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

使用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<Word>()正在触发。

而且,如果我将一些日志内容放入“ unracing”功能中,它们将起作用。我说的很清楚,暂停功能有效。断点不是。

我应该怎么调试它们?

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

enter image description here

3 个答案:

答案 0 :(得分:9)

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

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

如果您使用的是JetBrain IDE,则根据document,当您设置断点以确保suspend选项为ALL不是线程时。它对我有用。

enter image description here

更多信息,您可以查看document

enter image description here

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

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