Mar*_*nik 7 android kotlin kotlin-coroutines
对于使用异步API的任何人来说,这都是一个痛苦的熟悉问题:当您的调用遇到故障时,异步库的私有线程会检测到它,创建一个异常对象,并将其传递给您的回调。值得一毛钱的唯一信息就是该消息及其类型。堆栈跟踪毫无价值。
与Google Play报告应用程序崩溃的方式混杂在一起:消息被剥离,而您得到的只是堆栈跟踪。现在,您已一无所有。您只知道您的应用程序存在您在自己的测试中未检测到的错误。
Kotlin的协程至少给我们一些希望,可以将其做得更好。协程堆栈跟踪在概念上在那里,只是很难提取。但是,当前我们获得的堆栈跟踪与我上面描述的相同,没有用。
我熟悉kotlinx-coroutines-debug模块,并且在实现方面有一些规定可以重新创建协程堆栈跟踪,但是如何在用户智能手机上安装的生产应用程序中利用这些功能?
小智 6
我遇到了同样的问题。Kotlin 协程调试库对我没有任何帮助。因此,在研究了协程的实现之后,我基于字节码生成和MethodHandle API编写了自己的解决方案。它支持 JVM 1.8 和 Android API 26 或更高版本。我将其称为Stacktrace-decoroutinator。
堆栈跟踪丢失的原因是当协程唤醒时,仅调用其调用堆栈的最后一个方法。
我的库替换了协程唤醒实现。它在运行时生成名称与整个协程调用堆栈匹配的类。这些类除了在协程调用堆栈序列中相互调用之外不执行任何操作。
因此,如果协程抛出异常,它们会在创建异常堆栈跟踪期间模仿协程的真实调用堆栈。
| 归档时间: |
|
| 查看次数: |
169 次 |
| 最近记录: |