diff --git a/Cargo.toml b/Cargo.toml index ffb5aa371..d1bbcbba0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,13 +11,14 @@ members = [ resolver = "2" [profile.release] -panic = "abort" +panic = "unwind" codegen-units = 1 lto = "thin" opt-level = 3 -debug = false -strip = true +debug = 1 +strip = "none" overflow-checks = false +split-debuginfo = "unpacked" rpath = false [profile.dev] diff --git a/src-tauri/src/core/logger.rs b/src-tauri/src/core/logger.rs index 81ffeffd9..be619b65e 100644 --- a/src-tauri/src/core/logger.rs +++ b/src-tauri/src/core/logger.rs @@ -100,6 +100,22 @@ impl Logger { let sidecar_file_writer = self.generate_sidecar_writer()?; *self.sidecar_file_writer.write() = Some(sidecar_file_writer); + std::panic::set_hook(Box::new(move |info| { + let payload = info + .payload() + .downcast_ref::<&str>() + .unwrap_or(&"Unknown panic payload"); + let location = info + .location() + .map(|loc| format!("{}:{}", loc.file(), loc.line())) + .unwrap_or_else(|| "Unknown location".to_string()); + logging!(error, Type::System, "Panic occurred at {}: {}", location, payload); + if let Some(h) = Self::global().handle.lock().as_ref() { + h.flush(); + std::thread::sleep(std::time::Duration::from_millis(100)); + } + })); + Ok(()) }