我正在尝试调试协程,并且放置在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”功能中,它们将起作用。我说的很清楚,暂停功能有效。断点不是。
我应该怎么调试它们?
*已添加屏幕截图。用图标行看左边。为什么我的线路不可用?
答案 0 :(得分:9)
根据示例代码,在MAIN
和IO
之间切换协程上下文,因此在设置断点时,请确保suspend
选项为ALL
>
显示断点的选项。用鼠标左键设置一个断点,然后在断点上右键单击鼠标。
如果您使用的是JetBrain IDE,则根据document,当您设置断点以确保suspend
选项为ALL
不是线程时。它对我有用。
更多信息,您可以查看document
答案 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)
它仍然对我不起作用,因为我先运行应用程序然后附加调试器,但是当我改用调试时,它起作用了。