From 17a575a505cd682827fd49e64af3142ef9e5be60 Mon Sep 17 00:00:00 2001 From: Coxxs <58-coxxs@users.noreply.git.ryujinx.app> Date: Tue, 11 Nov 2025 14:15:55 +0800 Subject: [PATCH] gdb: refactor rcmd address parsing --- src/Ryujinx.HLE/Debugger/Debugger.Rcmd.cs | 40 +++++++++++++++-------- 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/src/Ryujinx.HLE/Debugger/Debugger.Rcmd.cs b/src/Ryujinx.HLE/Debugger/Debugger.Rcmd.cs index ea4c5aa98..b6e2031d5 100644 --- a/src/Ryujinx.HLE/Debugger/Debugger.Rcmd.cs +++ b/src/Ryujinx.HLE/Debugger/Debugger.Rcmd.cs @@ -142,16 +142,12 @@ namespace Ryujinx.HLE.Debugger return "No application process found\n"; } - ulong startAddress = 0; string trimmedArgs = arguments?.Trim() ?? string.Empty; + ulong startAddress = 0; if (!string.IsNullOrEmpty(trimmedArgs)) { - string value = trimmedArgs.StartsWith("0x", StringComparison.OrdinalIgnoreCase) - ? trimmedArgs[2..] - : trimmedArgs; - - if (value.Length == 0 || !ulong.TryParse(value, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out startAddress)) + if (!TryParseAddressArgument(trimmedArgs, out startAddress)) { return $"Invalid address: {trimmedArgs}\n"; } @@ -216,13 +212,7 @@ namespace Ryujinx.HLE.Debugger return "Missing address argument for `get mapping`\n"; } - ulong address; - - string value = trimmedArgs.StartsWith("0x", StringComparison.OrdinalIgnoreCase) - ? trimmedArgs[2..] - : trimmedArgs; - - if (value.Length == 0 || !ulong.TryParse(value, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out address)) + if (!TryParseAddressArgument(trimmedArgs, out ulong address)) { return $"Invalid address: {trimmedArgs}\n"; } @@ -287,6 +277,30 @@ namespace Ryujinx.HLE.Debugger return "Unknown "; } + private static bool TryParseAddressArgument(string text, out ulong value) + { + value = 0; + + if (string.IsNullOrWhiteSpace(text)) + { + return false; + } + + string trimmed = text.Trim(); + + if (trimmed.StartsWith("0x", StringComparison.OrdinalIgnoreCase)) + { + trimmed = trimmed[2..]; + } + + if (trimmed.Length == 0) + { + return false; + } + + return ulong.TryParse(trimmed, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out value); + } + private static string GetAttributeFlags(KMemoryInfo info) { char locked = info.Attribute.HasFlag(MemoryAttribute.PermissionLocked) ? 'L' : '-';