gdb: Wait for the application to start if user connect gdb too early

This commit is contained in:
Coxxs 2025-06-21 01:05:25 +08:00
parent 2c01f30f41
commit 84e078f94c

View file

@ -47,7 +47,7 @@ namespace Ryujinx.HLE.Debugger
MessageHandlerThread.Start();
}
private IDebuggableProcess DebugProcess => Device.System.DebugGetApplicationProcess();
private IDebuggableProcess DebugProcess => Device.System?.DebugGetApplicationProcess();
private KThread[] GetThreads() => DebugProcess.GetThreadUids().Select(x => DebugProcess.GetThread(x)).ToArray();
private bool IsProcessAarch32 => DebugProcess.GetThread(gThread.Value).Context.IsAarch32;
private KernelContext KernelContext => Device.System.KernelContext;
@ -761,6 +761,20 @@ namespace Ryujinx.HLE.Debugger
{
return;
}
// If the user connects before the application is running, wait for the application to start.
int retries = 10;
while (DebugProcess == null && retries-- > 0)
{
Thread.Sleep(200);
}
if (DebugProcess == null)
{
Logger.Warning?.Print(LogClass.GdbStub, "Application is not running, cannot accept GDB client connection");
ClientSocket.Close();
continue;
}
ClientSocket.NoDelay = true;
ReadStream = new NetworkStream(ClientSocket, System.IO.FileAccess.Read);
WriteStream = new NetworkStream(ClientSocket, System.IO.FileAccess.Write);