如何匹配新的 StackTrace 以抛出 Exception.StackTrace

How to match new StackTrace to throw Exception.StackTrace

我试图在不引发异常的情况下获取堆栈跟踪,并且它有效(人类可读),我遇到的唯一问题是两种方法之间的格式不同。这是我使用 Unity 遇到的一个问题,因为它解析从 throw 到 open VS 到关联行 # 的格式。因此,如果我使用新的 StackTrace,格式将关闭,双击 Unity 中的日志将不会执行任何操作。我怎样才能得到一个新的堆栈跟踪来匹配抛出的堆栈跟踪格式?

public class TestScript : MonoBehaviour
{
    private void Awake()
    {
        string throwTrace = null;
        string newTrace = null;
        try
        {
            newTrace = new System.Diagnostics.StackTrace(0, true).ToString();
            throw new Exception();
        }
        catch (Exception e)
        {
            throwTrace = e.StackTrace;
        }
        Debug.Log("throwTrace: {" + throwTrace + "}");
        Debug.Log("newTrace: {" + newTrace + "}");

    }
}

--

throwTrace: {  at TestScript.Awake () [0x00013] in /Users/lol_tim/New Unity Project/Assets/TestScript.cs:17 }

newTrace: {   at TestScript.Awake() in /Users/lol_tim/New Unity Project/Assets/TestScript.cs:line 16}

看起来我可以通过替换一个乱码(不太确定它的用途)并重新调整格式以匹配,至少在英语文化中可以让双击工作。我不确定这是否适用于非英语文化(我尝试在 运行 这段代码之前改变我的文化,但由于某种原因,所有内容仍然以英语出现)。当然,这非常丑陋,我希望有更好的方法。

System.Text.StringBuilder sb = new System.Text.StringBuilder(new System.Diagnostics.StackTrace(0, true).ToString());
sb.Remove(0, 1);
sb.Append(" ");
sb.Replace("(", " (");
sb.Replace(") in", ") [0x00000] in");
sb.Replace("\n ", " \n");
sb.Replace("line ", string.Empty);
newTrace = sb.ToString();