Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }