Пример #1
0
 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));
 }
Пример #2
0
        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;
 }
Пример #4
0
 public static SymbolWriter Create(PdbWriterOptions options, Stream pdbStream, string pdbFileName) =>
 new SymbolWriterImpl(CreateSymUnmanagedWriter2(options), pdbFileName, pdbStream, options, ownsStream: false);