'Logcat does not show an error message when an exception is thrown in the coroutine (Xiaomi)
It shows only I/Process: Sending signal. PID: xxxxx SIG: 9
I have tried to enable debug mode
System.setProperty(DEBUG_PROPERTY_NAME, DEBUG_PROPERTY_VALUE_ON)
but it did not help
Solution 1:[1]
I've also faced this issue sometime back. One of the workaround, is to use a CoroutineExceptionHandler
. You can create a handler to print your stack trace as follows.
val exceptionHandler = CoroutineExceptionHandler { _, ex ->
Log.e("CoroutineScope", "Caught ${Log.getStackTraceString(ex)}")
}
And then you can launch your coroutines as someCoroutineScope.launch(exceptionHandler) {}
.
Additionally, if you don't want to use handlers in release mode, then you can create your own custom coroutine launcher as an extension function.
fun CoroutineScope.launchCustom(block: suspend CoroutineScope.() -> Unit) : Job {
return if (BuildConfig.DEBUG) {
this.launch(exceptionHandler) {
block()
}
} else {
this.launch {
block()
}
}
}
Solution 2:[2]
I just encounter this problem ... I don't know the reason, very few cases I can found(https://juejin.cn/post/7085643598506491918)
Set an extra DefaultUncaughtExceptionHandler
works for me:
object ExceptionHandler {
fun setupExceptionHandler() {
val defaultUncaughtExceptionHandler = Thread.getDefaultUncaughtExceptionHandler()
Thread.setDefaultUncaughtExceptionHandler { thread, throwable ->
val message = "Uncaught exception in thread ${thread.name}:\n"
Log.e("AndroidRuntime", message, throwable)
defaultUncaughtExceptionHandler?.uncaughtException(thread, throwable)
}
}
}
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Siddharth Kamaria |
Solution 2 |