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
This commit is contained in:
parent
1bef70c068
commit
efebd8f94d
6 changed files with 76 additions and 47 deletions
|
@ -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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue