Files
Hasebe/Library/PackageCache/com.annulusgames.lit-motion@12af37b103ef/Editor/StackTraceHelper.cs
T
2026-09-21 12:15:57 +03:00

61 lines
1.8 KiB
C#

using System;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Security;
using System.Text;
using UnityEngine;
namespace LitMotion.Editor
{
internal static class StackTraceHelper
{
static readonly StringBuilder sb = new();
public static string AddHyperLink(this StackTrace stackTrace)
{
if (stackTrace == null) return "";
sb.Clear();
for (int i = 0; i < stackTrace.FrameCount; i++)
{
var sf = stackTrace.GetFrame(i);
if (sf.GetILOffset() != -1)
{
string fileName = null;
try
{
fileName = sf.GetFileName();
}
catch (NotSupportedException) { }
catch (SecurityException) { }
if (fileName != null)
{
sb.Append(' ');
sb.AppendFormat(CultureInfo.InvariantCulture, "(at {0})", AppendHyperLink(fileName, sf.GetFileLineNumber().ToString()));
sb.AppendLine();
}
}
}
return sb.ToString();
}
static string AppendHyperLink(string path, string line)
{
var fi = new FileInfo(path);
if (fi.Directory == null)
{
return fi.Name;
}
else
{
var fname = fi.FullName.Replace(Path.DirectorySeparatorChar, '/').Replace(Application.dataPath, "");
var withAssetsPath = "Assets/" + fname;
return "<a href=\"" + withAssetsPath + "\" line=\"" + line + "\">" + withAssetsPath + ":" + line + "</a>";
}
}
}
}