mirror of
https://git.ryujinx.app/ryubing/ryujinx.git
synced 2025-06-28 02:26:23 +02:00
gdb: Show thread names
Reference: d8a37b4b71/libraries/libstratosphere/source/osdbg/impl/osdbg_thread_type.os.horizon.hpp
This commit is contained in:
parent
5cad23f793
commit
9506eba982
2 changed files with 151 additions and 6 deletions
|
@ -34,6 +34,8 @@ namespace Ryujinx.HLE.Debugger
|
|||
private ulong? cThread;
|
||||
private ulong? gThread;
|
||||
|
||||
private string previousThreadListXml = "";
|
||||
|
||||
public Debugger(Switch device, ushort port)
|
||||
{
|
||||
Device = device;
|
||||
|
@ -368,7 +370,7 @@ namespace Ryujinx.HLE.Debugger
|
|||
|
||||
if (ss.ConsumePrefix("Supported:") || ss.ConsumeRemaining("Supported"))
|
||||
{
|
||||
Reply("PacketSize=10000;qXfer:features:read+");
|
||||
Reply("PacketSize=10000;qXfer:features:read+;qXfer:threads:read+");
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -404,10 +406,43 @@ namespace Ryujinx.HLE.Debugger
|
|||
break;
|
||||
}
|
||||
|
||||
if (ss.ConsumePrefix("Xfer:threads:read:"))
|
||||
{
|
||||
ss.ReadUntil(':');
|
||||
ulong offset = ss.ReadUntilAsHex(',');
|
||||
ulong len = ss.ReadRemainingAsHex();
|
||||
|
||||
var data = "";
|
||||
if (offset > 0)
|
||||
{
|
||||
data = previousThreadListXml;
|
||||
} else
|
||||
{
|
||||
previousThreadListXml = data = GetThreadListXml();
|
||||
}
|
||||
|
||||
if (offset >= (ulong)data.Length)
|
||||
{
|
||||
Reply("l");
|
||||
break;
|
||||
}
|
||||
|
||||
if (len >= (ulong)data.Length - offset)
|
||||
{
|
||||
Reply("l" + ToBinaryFormat(data.Substring((int)offset)));
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
Reply("m" + ToBinaryFormat(data.Substring((int)offset, (int)len)));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (ss.ConsumePrefix("Xfer:features:read:"))
|
||||
{
|
||||
string feature = ss.ReadUntil(':');
|
||||
ulong addr = ss.ReadUntilAsHex(',');
|
||||
ulong offset = ss.ReadUntilAsHex(',');
|
||||
ulong len = ss.ReadRemainingAsHex();
|
||||
|
||||
if (feature == "target.xml")
|
||||
|
@ -418,20 +453,20 @@ namespace Ryujinx.HLE.Debugger
|
|||
string data;
|
||||
if (RegisterInformation.Features.TryGetValue(feature, out data))
|
||||
{
|
||||
if (addr >= (ulong)data.Length)
|
||||
if (offset >= (ulong)data.Length)
|
||||
{
|
||||
Reply("l");
|
||||
break;
|
||||
}
|
||||
|
||||
if (len >= (ulong)data.Length - addr)
|
||||
if (len >= (ulong)data.Length - offset)
|
||||
{
|
||||
Reply("l" + ToBinaryFormat(data.Substring((int)addr)));
|
||||
Reply("l" + ToBinaryFormat(data.Substring((int)offset)));
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
Reply("m" + ToBinaryFormat(data.Substring((int)addr, (int)len)));
|
||||
Reply("m" + ToBinaryFormat(data.Substring((int)offset, (int)len)));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -469,6 +504,21 @@ namespace Ryujinx.HLE.Debugger
|
|||
}
|
||||
}
|
||||
|
||||
private string GetThreadListXml()
|
||||
{
|
||||
var sb = new StringBuilder();
|
||||
sb.Append("<?xml version=\"1.0\"?><threads>\n");
|
||||
|
||||
foreach (var thread in GetThreads())
|
||||
{
|
||||
string threadName = System.Security.SecurityElement.Escape(thread.GetThreadName());
|
||||
sb.Append($"<thread id=\"{thread.ThreadUid:x}\" name=\"{threadName}\" />\n");
|
||||
}
|
||||
|
||||
sb.Append("</threads>");
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
void CommandQuery()
|
||||
{
|
||||
// GDB is performing initial contact. Stop everything.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue