gdb: refactor rcmd address parsing

This commit is contained in:
Coxxs 2025-11-11 14:15:55 +08:00
parent ccca2e8282
commit 17a575a505

View file

@ -142,16 +142,12 @@ namespace Ryujinx.HLE.Debugger
return "No application process found\n"; return "No application process found\n";
} }
ulong startAddress = 0;
string trimmedArgs = arguments?.Trim() ?? string.Empty; string trimmedArgs = arguments?.Trim() ?? string.Empty;
ulong startAddress = 0;
if (!string.IsNullOrEmpty(trimmedArgs)) if (!string.IsNullOrEmpty(trimmedArgs))
{ {
string value = trimmedArgs.StartsWith("0x", StringComparison.OrdinalIgnoreCase) if (!TryParseAddressArgument(trimmedArgs, out startAddress))
? trimmedArgs[2..]
: trimmedArgs;
if (value.Length == 0 || !ulong.TryParse(value, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out startAddress))
{ {
return $"Invalid address: {trimmedArgs}\n"; return $"Invalid address: {trimmedArgs}\n";
} }
@ -216,13 +212,7 @@ namespace Ryujinx.HLE.Debugger
return "Missing address argument for `get mapping`\n"; return "Missing address argument for `get mapping`\n";
} }
ulong address; if (!TryParseAddressArgument(trimmedArgs, out 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))
{ {
return $"Invalid address: {trimmedArgs}\n"; return $"Invalid address: {trimmedArgs}\n";
} }
@ -287,6 +277,30 @@ namespace Ryujinx.HLE.Debugger
return "Unknown "; 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) private static string GetAttributeFlags(KMemoryInfo info)
{ {
char locked = info.Attribute.HasFlag(MemoryAttribute.PermissionLocked) ? 'L' : '-'; char locked = info.Attribute.HasFlag(MemoryAttribute.PermissionLocked) ? 'L' : '-';