协程抛出异常时Logcat不显示错误信息(小米)

IR4*_*R42 5 logcat kotlin android-studio kotlin-coroutines

它仅显示I/Process: Sending signal. PID: xxxxx SIG: 9

我尝试过启用调试模式

System.setProperty(DEBUG_PROPERTY_NAME, DEBUG_PROPERTY_VALUE_ON)
Run Code Online (Sandbox Code Playgroud)

但这没有帮助

Sid*_*ria 0

我前段时间也遇到过这个问题。解决方法之一是使用CoroutineExceptionHandler. 您可以创建一个处理程序来打印堆栈跟踪,如下所示。

val exceptionHandler = CoroutineExceptionHandler { _, ex ->
    Log.e("CoroutineScope", "Caught ${Log.getStackTraceString(ex)}")
}
Run Code Online (Sandbox Code Playgroud)

然后您可以将协程启动为someCoroutineScope.launch(exceptionHandler) {}.

此外,如果您不想在发布模式下使用处理程序,那么您可以创建自己的自定义协程启动器作为扩展函数。

fun CoroutineScope.launchCustom(block: suspend CoroutineScope.() -> Unit) : Job {

    return if (BuildConfig.DEBUG) {
        this.launch(exceptionHandler) {
            block()
        }
    } else {
        this.launch {
            block()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)