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