/// <summary> /// Initializes a new instance of the <see cref="GlobalsStream"/> class. /// </summary> /// <param name="stream">PDB stream that contains globals stream.</param> public GlobalsStream(PdbStream stream) : this(stream.File, stream.Reader) { }
/// <summary> /// Initializes a new instance of the <see cref="InfoStream"/> class. /// </summary> /// <param name="stream">PDB stream that contains PDB info stream.</param> public InfoStream(PdbStream stream) { Stream = stream; stream.Reader.Position = 0; if (Stream.Length < InfoStreamHeader.Size) { throw new Exception("PDB info stream does not contain a header."); } Header = InfoStreamHeader.Read(stream.Reader); if (Header.Version != InfoStreamVersion.VC70 && Header.Version != InfoStreamVersion.VC80 && Header.Version != InfoStreamVersion.VC110 && Header.Version != InfoStreamVersion.VC140) { throw new Exception("Unsupported PDB info stream version."); } NamedStreamMap = new NamedStreamMap(stream.Reader); namesMapCache = SimpleCache.CreateStruct(() => { int namesMapStreamIndex; if (!NamedStreamMap.Streams.TryGetValue("/names", out namesMapStreamIndex)) { return(null); } PdbStream namesMapStream = Stream.File.GetStream(namesMapStreamIndex); if (namesMapStream == null) { return(null); } return(new PdbStringTable(namesMapStream.Reader)); }); // Read feature signatures bool stop = false; List <PdbFeatures> allFeatures = new List <PdbFeatures>(); while (!stop && stream.Reader.BytesRemaining > 0) { PdbFeatureSignature signature = (PdbFeatureSignature)stream.Reader.ReadUint(); PdbFeatures features = PdbFeatures.None; switch (signature) { case PdbFeatureSignature.VC110: stop = true; features |= PdbFeatures.ContainsIdStream; break; case PdbFeatureSignature.VC140: features |= PdbFeatures.ContainsIdStream; break; case PdbFeatureSignature.NoTypeMerge: features |= PdbFeatures.NoTypeMerging; break; case PdbFeatureSignature.MinimalDebugInfo: features |= PdbFeatures.MinimalDebugInfo; break; } allFeatures.Add(features); } Features = allFeatures.ToArray(); }