From 1bb2af84ce9e0206de4cc86d724c9869f944a7b0 Mon Sep 17 00:00:00 2001 From: GreemDev Date: Tue, 21 Oct 2025 22:15:14 -0500 Subject: [PATCH 1/3] gdb: Catch SocketException from TcpListener#Start --- src/Ryujinx.HLE/Debugger/Debugger.MainThread.cs | 15 +++++++++++++-- src/Ryujinx.HLE/Debugger/Debugger.cs | 2 +- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/Ryujinx.HLE/Debugger/Debugger.MainThread.cs b/src/Ryujinx.HLE/Debugger/Debugger.MainThread.cs index 9ad80a58c..485e032fc 100644 --- a/src/Ryujinx.HLE/Debugger/Debugger.MainThread.cs +++ b/src/Ryujinx.HLE/Debugger/Debugger.MainThread.cs @@ -1,5 +1,6 @@ using Ryujinx.Common.Logging; using Ryujinx.HLE.Debugger.Gdb; +using System; using System.IO; using System.Net; using System.Net.Sockets; @@ -9,11 +10,21 @@ namespace Ryujinx.HLE.Debugger { public partial class Debugger { - private void DebuggerThreadMain() + private void MainLoop() { IPEndPoint endpoint = new(IPAddress.Any, GdbStubPort); _listenerSocket = new TcpListener(endpoint); - _listenerSocket.Start(); + + try + { + _listenerSocket.Start(); + } + catch (SocketException se) + { + Logger.Notice.Print(LogClass.GdbStub, $"Failed to create TCP client for GDB client: {Enum.GetName(se.SocketErrorCode)}"); + return; + } + Logger.Notice.Print(LogClass.GdbStub, $"Currently waiting on {endpoint} for GDB client"); while (!_shuttingDown) diff --git a/src/Ryujinx.HLE/Debugger/Debugger.cs b/src/Ryujinx.HLE/Debugger/Debugger.cs index 567e97071..ca6f39ec2 100644 --- a/src/Ryujinx.HLE/Debugger/Debugger.cs +++ b/src/Ryujinx.HLE/Debugger/Debugger.cs @@ -45,7 +45,7 @@ namespace Ryujinx.HLE.Debugger ARMeilleure.Optimizations.EnableDebugging = true; - _debuggerThread = new Thread(DebuggerThreadMain); + _debuggerThread = new Thread(MainLoop); _debuggerThread.Start(); _messageHandlerThread = new Thread(MessageHandlerMain); _messageHandlerThread.Start(); From 1248a054dea58febe74e54c5d64f896bf351085c Mon Sep 17 00:00:00 2001 From: Coxxs <58-coxxs@users.noreply.git.ryujinx.app> Date: Tue, 21 Oct 2025 23:16:18 -0500 Subject: [PATCH 2/3] gdb: Abort if unable to start GDB server (ryubing/ryujinx!186) See merge request ryubing/ryujinx!186 --- src/Ryujinx.HLE/Debugger/Debugger.MainThread.cs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/Ryujinx.HLE/Debugger/Debugger.MainThread.cs b/src/Ryujinx.HLE/Debugger/Debugger.MainThread.cs index 485e032fc..94c0e5519 100644 --- a/src/Ryujinx.HLE/Debugger/Debugger.MainThread.cs +++ b/src/Ryujinx.HLE/Debugger/Debugger.MainThread.cs @@ -21,8 +21,9 @@ namespace Ryujinx.HLE.Debugger } catch (SocketException se) { - Logger.Notice.Print(LogClass.GdbStub, $"Failed to create TCP client for GDB client: {Enum.GetName(se.SocketErrorCode)}"); - return; + Logger.Error?.Print(LogClass.GdbStub, + $"Failed to create TCP server on {endpoint} for GDB client: {Enum.GetName(se.SocketErrorCode)}"); + throw; } Logger.Notice.Print(LogClass.GdbStub, $"Currently waiting on {endpoint} for GDB client"); @@ -33,8 +34,10 @@ namespace Ryujinx.HLE.Debugger { _clientSocket = _listenerSocket.AcceptSocket(); } - catch (SocketException) + catch (SocketException se) { + Logger.Error?.Print(LogClass.GdbStub, + $"Failed to accept incoming GDB client connection: {Enum.GetName(se.SocketErrorCode)}"); return; } From 904d4a7eb09c220ab05f6718f5790a4af36523b2 Mon Sep 17 00:00:00 2001 From: GreemDev Date: Wed, 22 Oct 2025 01:07:19 -0500 Subject: [PATCH 3/3] gdb: Make waiting for a process to start more forgiving (200ms per poll 10x -> 500ms) --- src/Ryujinx.HLE/Debugger/Debugger.MainThread.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Ryujinx.HLE/Debugger/Debugger.MainThread.cs b/src/Ryujinx.HLE/Debugger/Debugger.MainThread.cs index 94c0e5519..a76221da8 100644 --- a/src/Ryujinx.HLE/Debugger/Debugger.MainThread.cs +++ b/src/Ryujinx.HLE/Debugger/Debugger.MainThread.cs @@ -45,7 +45,7 @@ namespace Ryujinx.HLE.Debugger int retries = 10; while ((DebugProcess == null || GetThreads().Length == 0) && retries-- > 0) { - Thread.Sleep(200); + Thread.Sleep(500); } if (DebugProcess == null || GetThreads().Length == 0)