Android studio 在协同路由中引发异常时,Logcat不显示错误消息(小米)

Android studio 在协同路由中引发异常时,Logcat不显示错误消息(小米),android-studio,kotlin,logcat,kotlin-coroutines,Android Studio,Kotlin,Logcat,Kotlin Coroutines,它只显示I/进程:发送信号。PID:xxxxx信号:9 我试着使 但这没有帮助我以前也遇到过这个问题。解决方法之一是使用CoroutineExceptionHandler。您可以创建一个处理程序来打印堆栈跟踪,如下所示 val exceptionHandler = CoroutineExceptionHandler { _, ex -> Log.e("CoroutineScope", "Caught ${Log.getStackTraceString(

它只显示
I/进程:发送信号。PID:xxxxx信号:9

我试着使


但这没有帮助

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

val exceptionHandler = CoroutineExceptionHandler { _, ex ->
    Log.e("CoroutineScope", "Caught ${Log.getStackTraceString(ex)}")
}
然后您可以作为
someCoroutineScope.launch(exceptionHandler){}
启动您的协同程序

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

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

    return if (BuildConfig.DEBUG) {
        this.launch(exceptionHandler) {
            block()
        }
    } else {
        this.launch {
            block()
        }
    }
}

@AnimeshSahu你能提供描述这种行为的任何来源吗?我试图在IDEA中的协同程序中抛出一个异常,它显示了一条错误消息:我对
启动
一个错误!如果它们是使用
CoroutineScope.launch
启动的,则应该打印它们,如果不是,则范围中似乎有一个CoroutineExceptionHandler,或者它可能是一个bug。CoroutineExceptionHandler仅在连接到GlobalScope时触发,如-如果一个coroutine遇到除CancellationException以外的异常,除此之外,它将取消其父级。此行为不能被重写,并用于为结构化并发提供稳定的协同路由层次结构。CoroutineExceptionHandler实现不用于子coroutines。我不使用也不打算使用CoroutineExceptionHandler,我所需要的只是让logcat在coroutines中显示抛出异常的消息,这样我就可以了解这是在哪里发生的,以及您为什么使用该设备?那是华为???
fun CoroutineScope.launchCustom(block: suspend CoroutineScope.() -> Unit) : Job {

    return if (BuildConfig.DEBUG) {
        this.launch(exceptionHandler) {
            block()
        }
    } else {
        this.launch {
            block()
        }
    }
}