public override void Write(StackTraceUnobfuscationResult res, Version target, Stream stream) { using (var writer = new StreamWriter(stream, Encoding.UTF8, 2048, true)) { foreach (var frame in res.StackFrames) { var alternatives = frame.Alternatives; var best = alternatives.FirstOrDefault(); if (best == null) { writer.WriteLine($"{frame.InputStackLine}?"); } else { if (VersionUtils.NumEqual(best.VersionNumber, target) >= 3) { writer.WriteLine(best.Unfuscated); } else { writer.WriteLine(best.Unfuscated + "(v" + alternatives[0].Version + ")"); } } } } }
public StackTraceUnobfuscationResult Unfuscate(string stacktrace, Version target = null) { var lines = stacktrace.Split('\n').Select(l => l.Trim()).Where(l => !string.IsNullOrEmpty(l)); List<StackFrameUnobfuscationResult> frames = new List<StackFrameUnobfuscationResult>(); foreach (var line in lines) { var sig = Signature.ParseStackTraceLine(line); frames.Add(new StackFrameUnobfuscationResult(sig, mappingDb.Get(sig).OrderByDescending(r => VersionUtils.NumEqual(r.VersionNumber, target)))); } return new StackTraceUnobfuscationResult(frames); }