Как соответствовать новому StackTrace, чтобы бросить Exception.StackTrace - PullRequest
0 голосов
/ 09 декабря 2018

Я пытаюсь получить трассировку стека, не выдавая исключение, и оно работает (удобочитаемо для человека), единственная проблема, с которой я сталкиваюсь, заключается в различном форматировании между двумя методами.Это проблема, с которой я столкнулся в 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}

1 Ответ

0 голосов
/ 13 декабря 2018

Похоже, что я могу заставить работать двойной щелчок, подставив бессмысленный код (не совсем уверенный, для чего он используется) и изменив форматирование, чтобы соответствовать, по крайней мере, в английской культуре.Я не уверен, что это работает с неанглийскими культурами (я пытался изменить свою культуру перед запуском этого кода, но почему-то все вышло на английском).Конечно, это ужасно, и мне хотелось бы, чтобы был лучший способ сделать это.

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();
...