gdb: dynamic rcmd system & more cleanups

This commit is contained in:
GreemDev
2025-10-20 21:18:06 -05:00
parent a0e5edf8ba
commit 71eb844dd8
9 changed files with 71 additions and 41 deletions

View File

@@ -20,6 +20,9 @@ namespace Ryujinx.HLE.Debugger.Gdb
Commands = commands;
}
public void ReplyHex(string data) => Reply(Helpers.ToHex(data));
public void ReplyHex(byte[] data) => Reply(Helpers.ToHex(data));
public void Reply(string cmd)
{
Logger.Debug?.Print(LogClass.GdbStub, $"Reply: {cmd}");
@@ -197,11 +200,10 @@ namespace Ryujinx.HLE.Debugger.Gdb
break;
}
Reply(Helpers.ToHex(
DebugProcess.IsThreadPaused(DebugProcess.GetThread(threadId.Value))
? "Paused"
: "Running"
)
ReplyHex(
DebugProcess.IsThreadPaused(DebugProcess.GetThread(threadId.Value))
? "Paused"
: "Running"
);
break;

View File

@@ -197,7 +197,7 @@ namespace Ryujinx.HLE.Debugger.Gdb
{
byte[] data = new byte[len];
Debugger.DebugProcess.CpuMemory.Read(addr, data);
Processor.Reply(Helpers.ToHex(data));
Processor.ReplyHex(data);
}
catch (InvalidMemoryRegionException)
{
@@ -422,17 +422,9 @@ namespace Ryujinx.HLE.Debugger.Gdb
string command = Helpers.FromHex(hexCommand);
Logger.Debug?.Print(LogClass.GdbStub, $"Received Rcmd: {command}");
string response = command.Trim().ToLowerInvariant() switch
{
"help" => "backtrace\nbt\nregisters\nreg\nget info\nminidump\n",
"get info" => Debugger.GetProcessInfo(),
"backtrace" or "bt" => Debugger.GetStackTrace(),
"registers" or "reg" => Debugger.GetRegisters(),
"minidump" => Debugger.GetMinidump(),
_ => $"Unknown command: {command}\n"
};
var rcmdDelegate = Debugger.FindRcmdDelegate(command);
Processor.Reply(Helpers.ToHex(response));
Processor.ReplyHex(rcmdDelegate?.Invoke(Debugger) ?? $"Unknown command: {command}\n");
}
catch (Exception e)
{

View File

@@ -20,8 +20,8 @@ namespace Ryujinx.HLE.Debugger.Gdb
32 => Helpers.ToHex(BitConverter.GetBytes(state.DebugPc)),
33 => Helpers.ToHex(BitConverter.GetBytes(state.Pstate)),
>= 34 and <= 65 => Helpers.ToHex(state.GetV(registerId - 34).ToArray()),
66 => Helpers.ToHex(BitConverter.GetBytes((uint)state.Fpsr)),
67 => Helpers.ToHex(BitConverter.GetBytes((uint)state.Fpcr)),
66 => Helpers.ToHex(BitConverter.GetBytes(state.Fpsr)),
67 => Helpers.ToHex(BitConverter.GetBytes(state.Fpcr)),
_ => null
};