StacktraceFilter.cs 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. using System.Linq;
  2. using System.Text;
  3. namespace UnityEngine.TestTools.Utils
  4. {
  5. internal static class StackTraceFilter
  6. {
  7. private static readonly string[] s_FilteredLogMessages =
  8. {
  9. @"UnityEngine.DebugLogHandler:Internal_Log",
  10. @"UnityEngine.DebugLogHandler:Log",
  11. @"UnityEngine.Logger:Log",
  12. @"UnityEngine.Debug"
  13. };
  14. private static readonly string[] s_LastMessages =
  15. {
  16. @"System.Reflection.MonoMethod:InternalInvoke(Object, Object[], Exception&)",
  17. @"UnityEditor.TestTools.TestRunner.EditModeRunner:InvokeDelegator"
  18. };
  19. public static string Filter(string inputStackTrace)
  20. {
  21. int idx;
  22. foreach (var lastMessage in s_LastMessages)
  23. {
  24. idx = inputStackTrace.IndexOf(lastMessage);
  25. if (idx != -1)
  26. inputStackTrace = inputStackTrace.Substring(0, idx);
  27. }
  28. var inputStackTraceLines = inputStackTrace.Split('\n');
  29. var result = new StringBuilder();
  30. foreach (var line in inputStackTraceLines)
  31. {
  32. if (s_FilteredLogMessages.Any(s => line.StartsWith(s)))
  33. continue;
  34. result.AppendLine(line);
  35. }
  36. return result.ToString();
  37. }
  38. }
  39. }