internal SequencePoint(PdbLine line) : this()
 {
     this.Offset    = (int)line.offset;
     this.Line      = (int)line.lineBegin;
     this.Column    = line.colBegin;
     this.EndLine   = (int)line.lineEnd;
     this.EndColumn = line.colEnd;
 }
        private IPrimarySourceLocation /*?*/ MapMethodBodyLocationToSourceLocation(IILLocation mbLocation, bool exact)
        {
            PdbFunction pdbFunction;
            var         doc = mbLocation.Document as MethodBodyDocument;

            if (doc == null || !this.pdbFunctionMap.TryGetValue(doc.MethodToken, out pdbFunction))
            {
                return(null);
            }
            if (pdbFunction.lines == null)
            {
                return(null);
            }
            foreach (PdbLines pdbLines in pdbFunction.lines)
            {
                PdbSource pdbSourceFile = pdbLines.file;
                if (pdbSourceFile == null)
                {
                    return(null);
                }

                PdbLine[] array    = pdbLines.lines;
                int       minIndex = 0;
                int       maxIndex = array.Length - 1;

                uint desiredOffset = mbLocation.Offset;

                while (minIndex <= maxIndex)
                {
                    int     midPointIndex = (minIndex + maxIndex) >> 1;
                    PdbLine mid           = array[midPointIndex];
                    if (midPointIndex == maxIndex ||
                        (mid.offset <= desiredOffset && desiredOffset < array[midPointIndex + 1].offset))
                    {
                        if (exact && desiredOffset != mid.offset)
                        {
                            return(null);
                        }
                        PdbLine           line  = mid;
                        PdbSourceDocument psDoc = this.GetPrimarySourceDocumentFor(pdbSourceFile);

                        return(new PdbSourceLineLocation(psDoc, (int)line.lineBegin, line.colBegin, (int)line.lineEnd, line.colEnd));
                    }
                    if (mid.offset < desiredOffset)
                    {
                        minIndex = midPointIndex + 1;
                    }
                    else
                    {
                        maxIndex = midPointIndex - 1;
                    }
                }
            }
            return(null);
        }
Beispiel #3
0
        static void ReadLine(PdbLine line, Document document, MethodDebugInformation info)
        {
            var sequence_point = new SequencePoint((int)line.offset, document);

            sequence_point.StartLine   = (int)line.lineBegin;
            sequence_point.StartColumn = (int)line.colBegin;
            sequence_point.EndLine     = (int)line.lineEnd;
            sequence_point.EndColumn   = (int)line.colEnd;

            info.sequence_points.Add(sequence_point);
        }
Beispiel #4
0
        public static void Dump(PdbLine s, int indent)
        {
            string pad = new String(' ', indent);

            if (s.line == 0xfeefee && s.colBegin == 0 && s.colEnd == 0)
            {
                Console.WriteLine("            {0}off={1:x8} #---------",
                                  pad, s.offset, s.line, s.colBegin);
            }
            else
            {
                Console.WriteLine("            {0}off={1:x8} #{2,6},{3,2}",
                                  pad, s.offset, s.line, s.colBegin);
            }
        }
Beispiel #5
0
        static void ReadLine(PdbLine line, Document document, InstructionMapper mapper)
        {
            var instruction = mapper((int)line.offset);

            if (instruction == null)
            {
                return;
            }

            var sequence_point = new SequencePoint(document);

            sequence_point.StartLine   = (int)line.lineBegin;
            sequence_point.StartColumn = (int)line.colBegin;
            sequence_point.EndLine     = (int)line.lineEnd;
            sequence_point.EndColumn   = (int)line.colEnd;

            instruction.SequencePoint = sequence_point;
        }
Beispiel #6
0
        void ReadLines(PdbLine line, Document document, IDictionary instructions)
        {
            Instruction instruction = (Instruction)instructions [(int)line.offset];

            if (instruction == null)
            {
                return;
            }

            SequencePoint point = new SequencePoint(document);

            point.StartLine   = (int)line.lineBegin;
            point.StartColumn = (int)line.colBegin;
            point.EndLine     = (int)line.lineEnd;
            point.EndColumn   = (int)line.colEnd;

            instruction.SequencePoint = point;
        }