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); }
/// <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; } } }
public DebuggeeModuleInfo(ModuleMetadata metadata, ISymUnmanagedReader5 symReader) { Debug.Assert(metadata != null); Debug.Assert(symReader != null); Metadata = metadata; _symReader = symReader; }
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; }
public unsafe static byte[] GetRawSourceLinkData(this ISymUnmanagedReader5 reader) => TryGetSourceLinkData(reader, out byte *data, out int size) ? GetBytes(data, size) : null;
public unsafe static string GetSourceLinkData(this ISymUnmanagedReader5 reader) => TryGetSourceLinkData(reader, out byte *data, out int size) ? GetString(data, size) : null;