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' : '-';