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 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 TryCreateEmbeddedPdbReader(PdbReaderOptions options, Metadata metadata) { var pdbContext = new PdbReaderContext(metadata.PEImage, options); if (!pdbContext.HasDebugInfo) { return(null); } return(TryCreateEmbeddedPortablePdbReader(pdbContext, metadata)); }
static ISymUnmanagedReader CreateSymUnmanagedReader(PdbReaderOptions options) { bool useDiaSymReader = (options & PdbReaderOptions.NoDiaSymReader) == 0; bool useOldDiaSymReader = (options & PdbReaderOptions.NoOldDiaSymReader) == 0; if (useDiaSymReader && canTry_Microsoft_DiaSymReader_Native) { try { var guid = CLSID_CorSymReader_SxS; object symReaderObj; var machine = ProcessorArchUtils.GetProcessCpuArchitecture(); switch (machine) { case Machine.AMD64: CreateSymReader_x64(ref guid, out symReaderObj); break; case Machine.I386: CreateSymReader_x86(ref guid, out symReaderObj); break; case Machine.ARMNT: CreateSymReader_arm(ref guid, out symReaderObj); break; case Machine.ARM64: CreateSymReader_arm64(ref guid, out symReaderObj); break; default: Debug.Fail($"Microsoft.DiaSymReader.Native doesn't support this CPU arch: {machine}"); symReaderObj = null; break; } if (symReaderObj is ISymUnmanagedReader symReader) { return(symReader); } } catch (DllNotFoundException) { Debug.WriteLine("Microsoft.DiaSymReader.Native not found, using diasymreader.dll instead"); } catch { } canTry_Microsoft_DiaSymReader_Native = false; } if (useOldDiaSymReader) { return((ISymUnmanagedReader)Activator.CreateInstance(CorSymReader_Type ??= Type.GetTypeFromCLSID(CLSID_CorSymReader_SxS))); } return(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 PdbReaderContext(IPEImage peImage, PdbReaderOptions options) { this.peImage = peImage; Options = options; codeViewDebugDir = TryGetDebugDirectoryEntry(peImage, ImageDebugType.CodeView); }
public static SymbolReader Create(PdbReaderOptions options, Metadata metadata, DataReaderFactory pdbStream) { var pdbContext = new PdbReaderContext(metadata.PEImage, options); return(CreateCore(pdbContext, metadata, pdbStream)); }
public void ExtractAndAnnotateHelixSequences() { var directory = @"G:\Projects\HumanGenome\Protein-PDBs\HumanProteins\SingleChain\FullyPositioned\ByProtein"; var outputFilePath = @"G:\Projects\HumanGenome\Protein-PDBs\HumanProteins\humanFullyPositionedSingleChainUniqueProteinHelixMarked.txt"; var pdbLookupFiles = Directory.EnumerateFiles(directory, "*.csv"); var pdbReaderOptions = new PdbReaderOptions { MaximumModelCount = 1, BuildMolecule = false }; var outputLock = new object(); File.Delete(outputFilePath); Parallel.ForEach(pdbLookupFiles, pdbLookupFile => { var pdbFilePaths = File.ReadAllLines(pdbLookupFile); var proteinOutput = new List <string>(); var maxProteinAminoAcidCount = 0; foreach (var pdbFilePath in pdbFilePaths) { try { var pdbResult = PdbReader.ReadFile(pdbFilePath, pdbReaderOptions); if (!pdbResult.Models.Any()) { return; } var firstModel = pdbResult.Models.First(); if (!firstModel.Chains.Any()) { return; } var hasHelixAnnotations = firstModel.Chains .SelectMany(chain => chain.Annotations) .Any(annotation => annotation.Type == PeptideSecondaryStructure.AlphaHelix); if (!hasHelixAnnotations) { return; } var aminoAcidCount = firstModel.Chains.Sum(chain => chain.AminoAcids.Count); if (aminoAcidCount <= maxProteinAminoAcidCount) { return; } proteinOutput.Clear(); proteinOutput.Add("#" + Path.GetFileNameWithoutExtension(pdbFilePath)); foreach (var chain in pdbResult.Models.First().Chains) { var helixAnnotations = chain.Annotations.Where(annot => annot.Type == PeptideSecondaryStructure.AlphaHelix).ToList(); var fullSequence = AlphaHelixAnnotationTool.GetFullSequence(chain, helixAnnotations); //var helixSequence = AlphaHelixAnnotationTool.GetHelixSequences(helixAnnotations); proteinOutput.Add(fullSequence); } maxProteinAminoAcidCount = aminoAcidCount; } catch (Exception e) { var errorMessage = $"Exception: {e.Message}(Path: {pdbFilePath})"; Console.WriteLine(errorMessage); File.AppendAllLines(@"C:\Temp\errors.txt", new [] { errorMessage }); } } lock (outputLock) { File.AppendAllLines(outputFilePath, proteinOutput); } }); }