Esempio n. 1
0
        private unsafe static bool TryGetSourceLinkData(ISymUnmanagedReader5 reader, out byte *data, out int size)
        {
            int hr = reader.GetSourceServerData(out data, out size);

            Marshal.ThrowExceptionForHR(hr);
            return(hr != HResult.S_FALSE);
        }
Esempio n. 2
0
        /// <summary>
        /// Creates <see cref="EditAndContinueMethodDebugInfoReader"/> backed by a given <see cref="ISymUnmanagedReader5"/>.
        /// </summary>
        /// <param name="symReader">SymReader open on a Portable or Windows PDB.</param>
        /// <param name="version">The version of the PDB to read.</param>
        /// <exception cref="ArgumentNullException"><paramref name="symReader"/> is null.</exception>
        /// <exception cref="ArgumentOutOfRangeException"><paramref name="version"/> is less than 1.</exception>
        /// <exception cref="COMException">Error reading debug information.</exception>
        /// <returns>
        /// The resulting reader does not take ownership of the <paramref name="symReader"/> or the memory it reads.
        /// </returns>
        /// <remarks>
        /// Automatically detects the underlying PDB format and returns the appropriate reader.
        /// </remarks>
        public unsafe static EditAndContinueMethodDebugInfoReader Create(ISymUnmanagedReader5 symReader, int version = 1)
        {
            if (symReader == null)
            {
                throw new ArgumentNullException(nameof(symReader));
            }

            if (version <= 0)
            {
                throw new ArgumentOutOfRangeException(nameof(version));
            }

            int hr = symReader.GetPortableDebugMetadataByVersion(version, metadata: out byte *metadata, size: out int size);

            Marshal.ThrowExceptionForHR(hr);

            if (hr == 0)
            {
                return(new Portable(new MetadataReader(metadata, size)));
            }
            else
            {
                return(new Native(symReader, version));
            }
        }
        private void CollectMethods(Stream pdbStream)
        {
            reader = SymUnmanagedReaderFactory.CreateReader <ISymUnmanagedReader5>(pdbStream, new DummyMetadataProvider());
            var docs = reader.GetDocuments();

            foreach (var doc in docs)
            {
                var language = doc.GetLanguage();
                // Note that we're lying here by specifying "cpp" as the language when it is C# in reality
                // (this is so we get some syntax-highlighting in Sourcetrail)
                var languageName = language == SymLanguageType.CSharp ? "cpp"
                    : language == SymLanguageType.Basic ? "basic" : "c";
                var methods = reader.GetMethodsInDocument(doc);
                foreach (var method in methods)
                {
                    var token     = method.GetToken();
                    var pdbMethod = new PdbMethod(token, doc.GetName(), languageName);

                    var sequencePoints = method.GetSequencePoints();
                    foreach (var sp in sequencePoints)
                    {
                        if (sp.IsHidden)
                        {
                            continue;
                        }
                        pdbMethod.AddSequence(sp.Offset, sp.StartLine, sp.StartColumn, sp.EndLine, sp.EndColumn);
                    }

                    methodsByToken[token] = pdbMethod;
                }
            }
        }
Esempio n. 4
0
        public DebuggeeModuleInfo(ModuleMetadata metadata, ISymUnmanagedReader5 symReader)
        {
            Debug.Assert(metadata != null);
            Debug.Assert(symReader != null);

            Metadata   = metadata;
            _symReader = symReader;
        }
Esempio n. 5
0
 public DiaSymNativeDebugInfoProvider(PEFile module, string pdbFileName, Stream stream)
 {
     this.module      = module;
     this.pdbFileName = pdbFileName;
     this.stream      = stream;
     this.metadata    = module.Metadata;
     this.reader      = SymUnmanagedReaderFactory.CreateReader <ISymUnmanagedReader5>(stream, this);
 }
            public Native(ISymUnmanagedReader5 symReader, int version)
            {
                Debug.Assert(symReader != null);
                Debug.Assert(version >= 1);

                _symReader = symReader;
                _version   = version;
            }
 public Native(Stream stream, ISymUnmanagedReader5 symReader, int version)
 {
     _stream    = stream;
     _symReader = symReader;
     _version   = version;
 }
Esempio n. 8
0
 public unsafe static byte[] GetRawSourceLinkData(this ISymUnmanagedReader5 reader) =>
 TryGetSourceLinkData(reader, out byte *data, out int size) ? GetBytes(data, size) : null;
Esempio n. 9
0
 public unsafe static string GetSourceLinkData(this ISymUnmanagedReader5 reader) =>
 TryGetSourceLinkData(reader, out byte *data, out int size) ? GetString(data, size) : null;