public static bool TryParse (string line, out StackTraceMetadata metadata) { metadata = null; var match = regex.Match (line); if (!match.Success) return false; string id = match.Groups ["Id"].Value; string val = match.Groups ["Value"].Value; metadata = new StackTraceMetadata (line, id, val); return true; }
public static StringBuilder Process(StreamReader reader, SymbolManager symbolManager) { List <StackFrameData> stackFrames = new List <StackFrameData>(); List <StackTraceMetadata> metadata = new List <StackTraceMetadata>(); StringBuilder sb = new StringBuilder(); bool linesEnded = false; for (var line = reader.ReadLine(); line != null; line = reader.ReadLine()) { StackFrameData sfData; if (!linesEnded && StackFrameData.TryParse(line, out sfData)) { stackFrames.Add(sfData); continue; } if (stackFrames.Count > 0) { linesEnded = true; StackTraceMetadata stMetadata; if (StackTraceMetadata.TryParse(line, out stMetadata)) { metadata.Add(stMetadata); continue; } DumpStackTrace(symbolManager, sb, stackFrames, metadata); // Clear lists for next stack trace stackFrames.Clear(); metadata.Clear(); } linesEnded = false; // Append last line sb.AppendLine(line); } if (stackFrames.Count > 0) { DumpStackTrace(symbolManager, sb, stackFrames, metadata); } return(sb); }
public static bool TryParse(string line, out StackTraceMetadata metadata) { metadata = null; var match = regex.Match(line); if (!match.Success) { return(false); } string id = match.Groups ["Id"].Value; string val = match.Groups ["Value"].Value; metadata = new StackTraceMetadata(line, id, val); return(true); }