static SymbolReader CreateCore(PdbReaderContext pdbContext, Metadata metadata, DataReaderFactory pdbStream) { SymbolReader symReader = null; bool error = true; try { if (!pdbContext.HasDebugInfo) { return(null); } if ((pdbContext.Options & PdbReaderOptions.MicrosoftComReader) != 0 && pdbStream is not null && IsWindowsPdb(pdbStream.CreateReader())) { symReader = Dss.SymbolReaderWriterFactory.Create(pdbContext, metadata, pdbStream); } else { symReader = CreateManaged(pdbContext, metadata, pdbStream); } if (symReader is not null) { error = false; return(symReader); } }
public static SymbolReader Create(PdbReaderOptions options, Metadata metadata, string pdbFileName) { var pdbContext = new PdbReaderContext(metadata.PEImage, options); if (!pdbContext.HasDebugInfo) { return(null); } return(CreateCore(pdbContext, metadata, DataReaderFactoryUtils.TryCreateDataReaderFactory(pdbFileName))); }
public static SymbolReader Create(PdbReaderOptions options, Metadata metadata, byte[] pdbData) { var pdbContext = new PdbReaderContext(metadata.PEImage, options); if (!pdbContext.HasDebugInfo) { return(null); } return(CreateCore(pdbContext, metadata, ByteArrayDataReaderFactory.Create(pdbData, filename: null))); }
public static SymbolReader CreateFromAssemblyFile(PdbReaderOptions options, Metadata metadata, string assemblyFileName) { var pdbContext = new PdbReaderContext(metadata.PEImage, options); if (!pdbContext.HasDebugInfo) { return(null); } if (!pdbContext.TryGetCodeViewData(out var guid, out uint age, out var pdbWindowsFilename)) { return(null); } string pdbFilename; int index = pdbWindowsFilename.LastIndexOfAny(windowsPathSepChars); if (index >= 0) { pdbFilename = pdbWindowsFilename.Substring(index + 1); } else { pdbFilename = pdbWindowsFilename; } string fileToCheck; try { fileToCheck = assemblyFileName == string.Empty ? pdbFilename : Path.Combine(Path.GetDirectoryName(assemblyFileName), pdbFilename); if (!File.Exists(fileToCheck)) { var ext = Path.GetExtension(pdbFilename); if (string.IsNullOrEmpty(ext)) { ext = "pdb"; } fileToCheck = Path.ChangeExtension(assemblyFileName, ext); } } catch (ArgumentException) { return(null); // Invalid filename } return(Create(options, metadata, fileToCheck)); }
public static SymbolReader Create(PdbReaderOptions options, Metadata metadata, DataReaderFactory pdbStream) { var pdbContext = new PdbReaderContext(metadata.PEImage, options); return(CreateCore(pdbContext, metadata, pdbStream)); }