gdb: Add monitor minidump command (ryubing/ryujinx!158)

See merge request ryubing/ryujinx!158
This commit is contained in:
Coxxs 2025-10-11 10:01:30 -05:00 committed by LotP
parent ef9810582a
commit 1865be47cf

View File

@ -1037,12 +1037,13 @@ namespace Ryujinx.HLE.Debugger
string response = command.Trim().ToLowerInvariant() switch string response = command.Trim().ToLowerInvariant() switch
{ {
"help" => "backtrace\nbt\nregisters\nreg\nget info\n", "help" => "backtrace\nbt\nregisters\nreg\nget info\nminidump",
"get info" => GetProcessInfo(), "get info" => GetProcessInfo(),
"backtrace" => GetStackTrace(), "backtrace" => GetStackTrace(),
"bt" => GetStackTrace(), "bt" => GetStackTrace(),
"registers" => GetRegisters(), "registers" => GetRegisters(),
"reg" => GetRegisters(), "reg" => GetRegisters(),
"minidump" => GetMinidump(),
_ => $"Unknown command: {command}\n" _ => $"Unknown command: {command}\n"
}; };
@ -1077,6 +1078,42 @@ namespace Ryujinx.HLE.Debugger
return Process.Debugger.GetCpuRegisterPrintout(DebugProcess.GetThread(gThread.Value)); return Process.Debugger.GetCpuRegisterPrintout(DebugProcess.GetThread(gThread.Value));
} }
private string GetMinidump()
{
var response = new StringBuilder();
response.AppendLine("=== Begin Minidump ===\n");
response.AppendLine(GetProcessInfo());
foreach (var thread in GetThreads())
{
response.AppendLine($"=== Thread {thread.ThreadUid} ===");
try
{
string stackTrace = Process.Debugger.GetGuestStackTrace(thread);
response.AppendLine(stackTrace);
}
catch (Exception e)
{
response.AppendLine($"[Error getting stack trace: {e.Message}]");
}
try
{
string registers = Process.Debugger.GetCpuRegisterPrintout(thread);
response.AppendLine(registers);
}
catch (Exception e)
{
response.AppendLine($"[Error getting registers: {e.Message}]");
}
}
response.AppendLine("=== End Minidump ===");
Logger.Info?.Print(LogClass.GdbStub, response.ToString());
return response.ToString();
}
private string GetProcessInfo() private string GetProcessInfo()
{ {
try try