From 4bd46c50be85c0f906528b112dadf599e20bcc81 Mon Sep 17 00:00:00 2001 From: Coxxs <58-coxxs@users.noreply.git.ryujinx.app> Date: Thu, 23 Oct 2025 23:39:39 +0800 Subject: [PATCH] Create minidump at ProcessUnhandledException --- src/Ryujinx.HLE/HOS/Horizon.cs | 5 +++++ src/Ryujinx/Program.cs | 30 ++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/src/Ryujinx.HLE/HOS/Horizon.cs b/src/Ryujinx.HLE/HOS/Horizon.cs index 83aaa1f4d..895d0c2bf 100644 --- a/src/Ryujinx.HLE/HOS/Horizon.cs +++ b/src/Ryujinx.HLE/HOS/Horizon.cs @@ -510,6 +510,11 @@ namespace Ryujinx.HLE.HOS } } + public string DebugGetApplicationProcessMinidump() + { + return DebugGetApplicationProcess()?.Debugger?.GetMinidump(); + } + internal KProcess DebugGetApplicationProcess() { lock (KernelContext.Processes) diff --git a/src/Ryujinx/Program.cs b/src/Ryujinx/Program.cs index d77e79756..90fc568d5 100644 --- a/src/Ryujinx/Program.cs +++ b/src/Ryujinx/Program.cs @@ -382,6 +382,11 @@ namespace Ryujinx.Ava exceptions.Add(initialException); } + if (isTerminating) + { + TryWriteApplicationMinidump(); + } + foreach (Exception e in exceptions) { string message = $"Unhandled exception caught: {e}"; @@ -400,6 +405,31 @@ namespace Ryujinx.Ava } } + private static void TryWriteApplicationMinidump() + { + try + { + if (HLE.Switch.Shared is not { } device) + { + return; + } + + var minidump = device?.System?.DebugGetApplicationProcessMinidump(); + + if (minidump == null) + { + Logger.Warning?.Print(LogClass.Application, "Failed to create minidump"); + return; + } + + Logger.Info?.Print(LogClass.Application, minidump); + } + catch (Exception e) + { + Logger.Error?.Print(LogClass.Application, $"Failed to create minidump: {e.Message}"); + } + } + internal static void Exit() { DiscordIntegrationModule.Exit();