コード例 #1
0
 /// <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)
 {
 }
コード例 #2
0
ファイル: InfoStream.cs プロジェクト: southpolenator/SharpPdb
        /// <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();
        }