gdb: Fix crash when gdb client disconnected in some cases

This commit is contained in:
Coxxs 2025-06-21 05:27:39 +08:00
parent a2b35ecce3
commit eb8b35b170

View file

@ -208,30 +208,40 @@ namespace Ryujinx.HLE.Debugger
while (!_shuttingDown) while (!_shuttingDown)
{ {
IMessage msg = Messages.Take(); IMessage msg = Messages.Take();
switch (msg) try {
switch (msg)
{
case BreakInMessage:
Logger.Notice.Print(LogClass.GdbStub, "Break-in requested");
CommandQuery();
break;
case SendNackMessage:
WriteStream.WriteByte((byte)'-');
break;
case CommandMessage { Command: var cmd }:
Logger.Debug?.Print(LogClass.GdbStub, $"Received Command: {cmd}");
WriteStream.WriteByte((byte)'+');
ProcessCommand(cmd);
break;
case ThreadBreakMessage { Context: var ctx }:
DebugProcess.DebugStop();
Reply($"T05thread:{ctx.ThreadUid:x};");
break;
case KillMessage:
return;
}
}
catch (IOException e)
{ {
case BreakInMessage: Logger.Error?.Print(LogClass.GdbStub, "Error while processing GDB messages", e);
Logger.Notice.Print(LogClass.GdbStub, "Break-in requested"); }
CommandQuery(); catch (NullReferenceException e)
break; {
Logger.Error?.Print(LogClass.GdbStub, "Error while processing GDB messages", e);
case SendNackMessage:
WriteStream.WriteByte((byte)'-');
break;
case CommandMessage { Command: var cmd }:
Logger.Debug?.Print(LogClass.GdbStub, $"Received Command: {cmd}");
WriteStream.WriteByte((byte)'+');
ProcessCommand(cmd);
break;
case ThreadBreakMessage { Context: var ctx }:
DebugProcess.DebugStop();
Reply($"T05thread:{ctx.ThreadUid:x};");
break;
case KillMessage:
return;
} }
} }
} }