/// <summary> /// Adds <paramref name="pdbDoc"/> if it doesn't exist /// </summary> /// <param name="pdbDoc">PDB document</param> /// <returns>A <see cref="ISymbolDocumentWriter"/> instance</returns> ISymbolDocumentWriter Add(PdbDocument pdbDoc) { ISymbolDocumentWriter docWriter; if (pdbDocs.TryGetValue(pdbDoc, out docWriter)) { return(docWriter); } docWriter = writer.DefineDocument(pdbDoc.Url, pdbDoc.Language, pdbDoc.LanguageVendor, pdbDoc.DocumentType); docWriter.SetCheckSum(pdbDoc.CheckSumAlgorithmId, pdbDoc.CheckSum); pdbDocs.Add(pdbDoc, docWriter); return(docWriter); }
ISymbolDocumentWriter Add(PdbDocument pdbDoc) { if (pdbDocs.TryGetValue(pdbDoc, out var docWriter)) { return(docWriter); } docWriter = writer.DefineDocument(pdbDoc.Url, pdbDoc.Language, pdbDoc.LanguageVendor, pdbDoc.DocumentType); docWriter.SetCheckSum(pdbDoc.CheckSumAlgorithmId, pdbDoc.CheckSum); if (TryGetCustomDebugInfo(pdbDoc, out PdbEmbeddedSourceCustomDebugInfo sourceCdi)) { docWriter.SetSource(sourceCdi.SourceCodeBlob); } pdbDocs.Add(pdbDoc, docWriter); return(docWriter); }
public void Write(WindowsPdbWriter pdbWriter, IList <Instruction> instrs) { checkedPdbDocs.Clear(); while (true) { PdbDocument currPdbDoc = null; bool otherDocsAvailable = false; int index = 0, instrOffset = 0; Instruction instr = null; for (int i = 0; i < instrs.Count; i++, instrOffset += instr.GetSize()) { instr = instrs[i]; var seqp = instr.SequencePoint; if (seqp == null || seqp.Document == null) { continue; } if (checkedPdbDocs.ContainsKey(seqp.Document)) { continue; } if (currPdbDoc == null) { currPdbDoc = seqp.Document; } else if (currPdbDoc != seqp.Document) { otherDocsAvailable = true; continue; } if (index >= instrOffsets.Length) { int newSize = index * 2; if (newSize < 64) { newSize = 64; } Array.Resize(ref instrOffsets, newSize); Array.Resize(ref startLines, newSize); Array.Resize(ref startColumns, newSize); Array.Resize(ref endLines, newSize); Array.Resize(ref endColumns, newSize); } instrOffsets[index] = instrOffset; startLines[index] = seqp.StartLine; startColumns[index] = seqp.StartColumn; endLines[index] = seqp.EndLine; endColumns[index] = seqp.EndColumn; index++; } if (index != 0) { pdbWriter.writer.DefineSequencePoints(pdbWriter.Add(currPdbDoc), (uint)index, instrOffsets, startLines, startColumns, endLines, endColumns); } if (!otherDocsAvailable) { break; } if (currPdbDoc != null) { checkedPdbDocs.Add(currPdbDoc, true); } } }
private string GetSourcePath(PdbDocument document) { return(document.Url); }