ParseFrames(JArray frames) { if (frames == null) { return(Array.Empty <MonoStateFrame> ()); } var output = new MonoStateFrame[frames.Count]; for (int i = 0; i < frames.Count; i++) { var frame = ((JObject)frames[i]); //Console.WriteLine (frame.ToString ()); if (!frame.ContainsKey("is_managed") || (string)(frame["is_managed"]) != "true") { var added = new MonoStateUnmanagedFrame(); added.address = (string)frame["native_address"]; Console.WriteLine("Native address: {0}", added.address); output [i] = added; } else { var added = new MonoStateManagedFrame(); added.mvid = (string)frame ["guid"]; added.token = Convert.ToUInt32((string)frame ["token"], 16); added.offset = Convert.ToUInt32((string)frame ["il_offset"], 16); output[i] = added; } } return(output); }
public void Enrich(MonoStateManagedFrame frame) { var method_idx = new Tuple <string, uint>(frame.mvid, frame.token); if (!Lookup.ContainsKey(method_idx)) { Console.WriteLine("Missing information for {0} {1}", frame.mvid, frame.token); return; } var seqs = Lookup [method_idx]; uint goal = frame.offset; foreach (var seq in seqs) { if (goal != seq.Offset) { continue; } frame.start_line = seq.StartLine; frame.start_col = seq.StartColumn; frame.end_line = seq.EndLine; frame.end_col = seq.EndColumn; frame.file = seq.Document.Url; break; } var typ = Types[method_idx]; frame.assembly = typ.Item1; frame.klass = typ.Item2; frame.function = typ.Item3; // Console.WriteLine("Made frame: {0} {1} {2} {3} {4}", frame.assembly, frame.klass, frame.function, frame.file, frame.start_line); }