Пример #1
0
        /// <summary>
        /// Adds the specified PdbFunction lines to the provided function wrapper.
        /// </summary>
        /// <param name="wrappedPdbFunction">The wrapped PdbFunction, the lines
        /// should be added to.</param>
        /// <param name="pdbFunctionLines">A PdbLines object containing the
        /// source lines of a PdbFunction.</param>
        private static void AddPdbFunctionLines(PdbFunction wrappedPdbFunction, object pdbFunctionLines)
        {
            if (pdbFunctionLines == null || (pdbFunctionLines as Array).Length == 0)
            {
                return;
            }

            object lines = (pdbFunctionLines as Array).GetValue(0);

            var pdbFunctionLinesFile =
                GetField(lines, PdbLinesType, PdbLinesFileFieldName);
            var pdbFunctionLinesFileName =
                GetField(pdbFunctionLinesFile, PdbSourceType, PdbSourceNameFieldName) as string;

            wrappedPdbFunction.SourceFilename = pdbFunctionLinesFileName;

            var pdbFunctionLinesLineArray =
                GetField(lines, PdbLinesType, PdbLinesLinesFieldName) as Array;

            if (pdbFunctionLinesLineArray?.Length > 0)
            {
                var lineNumbers = FilterAndSortLines(pdbFunctionLinesLineArray);

                if (lineNumbers.Count == 0)
                {
                    wrappedPdbFunction.StartLine = CompilerHiddenLine;
                    wrappedPdbFunction.EndLine   = CompilerHiddenLine;
                }
                else
                {
                    wrappedPdbFunction.StartLine = lineNumbers.First();
                    wrappedPdbFunction.EndLine   = lineNumbers.Last();
                }
            }
        }
Пример #2
0
 /// <summary>
 /// Provides the method mapping for the specified Pdb method.
 /// </summary>
 private static MethodMapping GetMapping(PdbFunction pdbFunction)
 {
     return(new MethodMapping()
     {
         MethodToken = pdbFunction.Token,
         SourceFile = pdbFunction.SourceFilename,
         StartLine = pdbFunction.StartLine,
         EndLine = pdbFunction.EndLine
     });
 }
Пример #3
0
        /// <summary>
        /// Wraps the specified MS PdbFunction object into an object of type
        /// <see cref="PdbFunction"/>.
        /// </summary>
        private static PdbFunction WrapPdbFunction(object pdbFunction)
        {
            var wrappedPdbFunction = new PdbFunction();

            wrappedPdbFunction.Token =
                (uint)GetField(pdbFunction, PdbFunctionType, PdbFunctionTokenFieldName);

            var pdbFunctionLines =
                GetField(pdbFunction, PdbFunctionType, PdbFunctionLinesFieldName);

            if (pdbFunctionLines != null)
            {
                AddPdbFunctionLines(wrappedPdbFunction, pdbFunctionLines);
            }

            return(wrappedPdbFunction);
        }