Пример #1
0
        SymbolDocument[] ReadDocuments()
        {
            Debug.Assert(module is not null);
            var docTbl     = pdbMetadata.TablesStream.DocumentTable;
            var docs       = new SymbolDocument[docTbl.Rows];
            var nameReader = new DocumentNameReader(pdbMetadata.BlobStream);
            var custInfos  = ListCache <PdbCustomDebugInfo> .AllocList();

            var gpContext = new GenericParamContext();

            for (int i = 0; i < docs.Length; i++)
            {
                bool b = pdbMetadata.TablesStream.TryReadDocumentRow((uint)i + 1, out var row);
                Debug.Assert(b);
                var url                 = nameReader.ReadDocumentName(row.Name);
                var language            = pdbMetadata.GuidStream.Read(row.Language) ?? Guid.Empty;
                var languageVendor      = GetLanguageVendor(language);
                var documentType        = PdbDocumentConstants.DocumentTypeText;
                var checkSumAlgorithmId = pdbMetadata.GuidStream.Read(row.HashAlgorithm) ?? Guid.Empty;
                var checkSum            = pdbMetadata.BlobStream.ReadNoNull(row.Hash);

                var token = new MDToken(Table.Document, i + 1).ToInt32();
                custInfos.Clear();
                GetCustomDebugInfos(token, gpContext, custInfos);
                var custInfosArray = custInfos.Count == 0 ? Array2.Empty <PdbCustomDebugInfo>() : custInfos.ToArray();

                docs[i] = new SymbolDocumentImpl(url, language, languageVendor, documentType, checkSumAlgorithmId, checkSum, custInfosArray);
            }
            ListCache <PdbCustomDebugInfo> .Free(ref custInfos);

            return(docs);
        }
Пример #2
0
        SymbolDocument[] ReadDocuments()
        {
            Debug.Assert(module != null);
            var docTbl     = pdbMetaData.TablesStream.DocumentTable;
            var docs       = new SymbolDocument[docTbl.Rows];
            var nameReader = new DocumentNameReader(pdbMetaData.BlobStream);
            var custInfos  = ListCache <PdbCustomDebugInfo> .AllocList();

            var gpContext = new GenericParamContext();

            for (int i = 0; i < docs.Length; i++)
            {
                uint nameOffset, hashAlgorithmIndex, hashOffset;
                uint languageIndex       = pdbMetaData.TablesStream.ReadDocumentRow2((uint)i + 1, out nameOffset, out hashAlgorithmIndex, out hashOffset);
                var  url                 = nameReader.ReadDocumentName(nameOffset);
                var  language            = pdbMetaData.GuidStream.Read(languageIndex) ?? Guid.Empty;
                var  languageVendor      = GetLanguageVendor(language);
                var  documentType        = PdbDocumentConstants.DocumentTypeText;
                var  checkSumAlgorithmId = pdbMetaData.GuidStream.Read(hashAlgorithmIndex) ?? Guid.Empty;
                var  checkSum            = pdbMetaData.BlobStream.ReadNoNull(hashOffset);

                var token = new MDToken(Table.Document, i + 1).ToInt32();
                custInfos.Clear();
                GetCustomDebugInfos(token, gpContext, custInfos);
                var custInfosArray = custInfos.Count == 0 ? emptyPdbCustomDebugInfos : custInfos.ToArray();

                docs[i] = new SymbolDocumentImpl(url, language, languageVendor, documentType, checkSumAlgorithmId, checkSum, custInfosArray);
            }
            ListCache <PdbCustomDebugInfo> .Free(ref custInfos);

            return(docs);
        }
Пример #3
0
 PdbDocument(SymbolDocument symDoc, bool partial)
 {
     if (symDoc == null)
     {
         throw new ArgumentNullException(nameof(symDoc));
     }
     Url = symDoc.URL;
     if (!partial)
     {
         Initialize(symDoc);
     }
 }
Пример #4
0
        bool TryGetSymbolDocument(uint rid, out SymbolDocument document)
        {
            int index = (int)rid - 1;

            if ((uint)index >= (uint)documents.Length)
            {
                Debug.Fail("Couldn't find document with rid 0x" + rid.ToString("X6"));
                document = null;
                return(false);
            }
            document = documents[index];
            return(true);
        }
Пример #5
0
 internal void Initialize(SymbolDocument symDoc)
 {
     Language            = symDoc.Language;
     LanguageVendor      = symDoc.LanguageVendor;
     DocumentType        = symDoc.DocumentType;
     CheckSumAlgorithmId = symDoc.CheckSumAlgorithmId;
     CheckSum            = symDoc.CheckSum;
     customDebugInfos    = new List <PdbCustomDebugInfo>();
     foreach (var cdi in symDoc.CustomDebugInfos)
     {
         customDebugInfos.Add(cdi);
     }
 }
Пример #6
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="symDoc">A <see cref="SymbolDocument"/> instance</param>
 public PdbDocument(SymbolDocument symDoc)
 {
     if (symDoc == null)
     {
         throw new ArgumentNullException("symDoc");
     }
     this.Url                 = symDoc.URL;
     this.Language            = symDoc.Language;
     this.LanguageVendor      = symDoc.LanguageVendor;
     this.DocumentType        = symDoc.DocumentType;
     this.CheckSumAlgorithmId = symDoc.CheckSumAlgorithmId;
     this.CheckSum            = symDoc.CheckSum;
     foreach (var cdi in symDoc.CustomDebugInfos)
     {
         customDebugInfos.Add(cdi);
     }
 }
Пример #7
0
 internal static PdbDocument CreatePartialForCompare(SymbolDocument symDoc) =>
 new PdbDocument(symDoc, partial: true);
Пример #8
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="symDoc">A <see cref="SymbolDocument"/> instance</param>
 public PdbDocument(SymbolDocument symDoc) : this(symDoc, partial : false)
 {
 }