From efebd8f94de03ef5cab63803f0cf37fc39258682 Mon Sep 17 00:00:00 2001
From: jduncanator <1518948+jduncanator@users.noreply.github.com>
Date: Fri, 15 Mar 2019 14:37:54 +1100
Subject: 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
---
 Ryujinx.HLE/HOS/Kernel/Process/HleProcessDebugger.cs | 17 ++++++++---------
 1 file changed, 8 insertions(+), 9 deletions(-)

(limited to 'Ryujinx.HLE/HOS/Kernel/Process/HleProcessDebugger.cs')

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)
-- 
cgit v1.2.3-70-g09d2