如何匹配新的 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();
我试图在不引发异常的情况下获取堆栈跟踪,并且它有效(人类可读),我遇到的唯一问题是两种方法之间的格式不同。这是我使用 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();