From 3a28fe17f80dddfc0e5fb592c5d2b2d56a2842e7 Mon Sep 17 00:00:00 2001 From: Cilly Leang Date: Tue, 27 Jan 2026 02:12:00 +1100 Subject: [PATCH] fix: add default uncaught exception handler Sometimes a coroutine will crash and nothing gets emitted in logcat, this makes sure to at least show *something* --- ui/src/commonMain/kotlin/moe/lava/neon/ui/App.kt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/ui/src/commonMain/kotlin/moe/lava/neon/ui/App.kt b/ui/src/commonMain/kotlin/moe/lava/neon/ui/App.kt index acb7bb8..96552ef 100644 --- a/ui/src/commonMain/kotlin/moe/lava/neon/ui/App.kt +++ b/ui/src/commonMain/kotlin/moe/lava/neon/ui/App.kt @@ -10,6 +10,7 @@ import androidx.navigation3.runtime.rememberNavBackStack import androidx.navigation3.runtime.rememberSaveableStateHolderNavEntryDecorator import androidx.navigation3.ui.NavDisplay import androidx.savedstate.serialization.SavedStateConfiguration +import co.touchlab.kermit.Logger import dev.zacsweers.metro.createGraph import dev.zacsweers.metrox.viewmodel.LocalMetroViewModelFactory import kotlinx.serialization.Serializable @@ -18,6 +19,7 @@ import kotlinx.serialization.modules.polymorphic import moe.lava.neon.ui.di.AppUiGraph import moe.lava.neon.ui.screens.Login import moe.lava.neon.ui.screens.Sample +import kotlin.system.exitProcess private object Route { @Serializable @@ -38,6 +40,11 @@ private val config = SavedStateConfiguration { @Composable fun App() { + Thread.setDefaultUncaughtExceptionHandler { t: Thread, e: Throwable -> + Logger.withTag("neon.thrhandler").a("Uncaught from $t: ${e}\n${e.stackTraceToString()}", e) + exitProcess(1) + } + val uiGraph = createGraph() val graph = uiGraph.core CaptchaBinder(graph.api)