diff options
author | jduncanator <1518948+jduncanator@users.noreply.github.com> | 2019-03-15 14:37:54 +1100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-03-15 14:37:54 +1100 |
commit | efebd8f94de03ef5cab63803f0cf37fc39258682 (patch) | |
tree | 57f7a6711c27290d3d0a00a918bdb965816eaf75 /Ryujinx.HLE/HOS/Kernel/Process/HleProcessDebugger.cs | |
parent | 1bef70c068f8aeb6a3a518b8ca635de19122da14 (diff) |
Print Guest Stack Trace in ServiceNotImplemented Exception (#650)
* Print Guest Stack Trace in ServiceNotImplemented Exception
* Remove PrintGuestStackTrace
* Print Process Name and PID at the start of guest stack trace
Diffstat (limited to 'Ryujinx.HLE/HOS/Kernel/Process/HleProcessDebugger.cs')
-rw-r--r-- | Ryujinx.HLE/HOS/Kernel/Process/HleProcessDebugger.cs | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/Ryujinx.HLE/HOS/Kernel/Process/HleProcessDebugger.cs b/Ryujinx.HLE/HOS/Kernel/Process/HleProcessDebugger.cs index 0268de7d..d31f95b4 100644 --- a/Ryujinx.HLE/HOS/Kernel/Process/HleProcessDebugger.cs +++ b/Ryujinx.HLE/HOS/Kernel/Process/HleProcessDebugger.cs @@ -4,6 +4,7 @@ using Ryujinx.Common.Logging; using Ryujinx.HLE.HOS.Diagnostics.Demangler; using Ryujinx.HLE.HOS.Kernel.Memory; using Ryujinx.HLE.Loaders.Elf; +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -41,14 +42,12 @@ namespace Ryujinx.HLE.HOS.Kernel.Process _images = new List<Image>(); } - public void PrintGuestStackTrace(CpuThreadState threadState) + public string GetGuestStackTrace(CpuThreadState threadState) { EnsureLoaded(); StringBuilder trace = new StringBuilder(); - trace.AppendLine("Guest stack trace:"); - void AppendTrace(long address) { Image image = GetImage(address, out int imageIndex); @@ -68,22 +67,22 @@ namespace Ryujinx.HLE.HOS.Kernel.Process string imageName = GetGuessedNsoNameFromIndex(imageIndex); - string imageNameAndOffset = $"[{_owner.Name}] {imageName}:0x{offset:x8}"; - - trace.AppendLine($" {imageNameAndOffset} {subName}"); + trace.AppendLine($" {imageName}:0x{offset:x8} {subName}"); } else { - trace.AppendLine($" [{_owner.Name}] ??? {subName}"); + trace.AppendLine($" ??? {subName}"); } } //TODO: ARM32. long framePointer = (long)threadState.X29; + trace.AppendLine($"Process: {_owner.Name}, PID: {_owner.Pid}"); + while (framePointer != 0) { - if ((framePointer & 7) != 0 || + if ((framePointer & 7) != 0 || !_owner.CpuMemory.IsMapped(framePointer) || !_owner.CpuMemory.IsMapped(framePointer + 8)) { @@ -97,7 +96,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Process framePointer = _owner.CpuMemory.ReadInt64(framePointer); } - Logger.PrintInfo(LogClass.Cpu, trace.ToString()); + return trace.ToString(); } private bool TryGetSubName(Image image, long address, out string name) |