public static SymbolWriter Create(PdbWriterOptions options, string pdbFileName) { if (File.Exists(pdbFileName)) { File.Delete(pdbFileName); } return(new SymbolWriterImpl(CreateSymUnmanagedWriter2(options), pdbFileName, File.Create(pdbFileName), options, ownsStream: true)); }
static ISymUnmanagedWriter2 CreateSymUnmanagedWriter2(PdbWriterOptions options) { bool useDiaSymReader = (options & PdbWriterOptions.NoDiaSymReader) == 0; bool useOldDiaSymReader = (options & PdbWriterOptions.NoOldDiaSymReader) == 0; if (useDiaSymReader && canTry_Microsoft_DiaSymReader_Native) { try { var guid = CLSID_CorSymWriter_SxS; object symWriterObj; var machine = ProcessorArchUtils.GetProcessCpuArchitecture(); switch (machine) { case Machine.AMD64: CreateSymWriter_x64(ref guid, out symWriterObj); break; case Machine.I386: CreateSymWriter_x86(ref guid, out symWriterObj); break; case Machine.ARMNT: CreateSymWriter_arm(ref guid, out symWriterObj); break; case Machine.ARM64: CreateSymWriter_arm64(ref guid, out symWriterObj); break; default: Debug.Fail($"Microsoft.DiaSymReader.Native doesn't support this CPU arch: {machine}"); symWriterObj = null; break; } if (symWriterObj is ISymUnmanagedWriter2 symWriter) { return(symWriter); } } catch (DllNotFoundException) { Debug.WriteLine("Microsoft.DiaSymReader.Native not found, using diasymreader.dll instead"); } catch { } canTry_Microsoft_DiaSymReader_Native = false; } if (useOldDiaSymReader) { return((ISymUnmanagedWriter2)Activator.CreateInstance(CorSymWriterType ??= Type.GetTypeFromCLSID(CLSID_CorSymWriter_SxS))); } return(null); }
public SymbolWriterImpl(ISymUnmanagedWriter2 writer, string pdbFileName, Stream pdbStream, PdbWriterOptions options, bool ownsStream) { this.writer = writer ?? throw new ArgumentNullException(nameof(writer)); asyncMethodWriter = writer as ISymUnmanagedAsyncMethodPropertiesWriter; this.pdbStream = pdbStream ?? throw new ArgumentNullException(nameof(pdbStream)); this.pdbFileName = pdbFileName; this.ownsStream = ownsStream; isDeterministic = (options & PdbWriterOptions.Deterministic) != 0 && writer is ISymUnmanagedWriter6; }
public static SymbolWriter Create(PdbWriterOptions options, Stream pdbStream, string pdbFileName) => new SymbolWriterImpl(CreateSymUnmanagedWriter2(options), pdbFileName, pdbStream, options, ownsStream: false);