コード例 #1
0
 /// <summary>
 /// Checks availability of debugging information for given assembly.
 /// </summary>
 /// <param name="assemblyPath">
 /// File path of the assembly or null
 /// </param>
 /// <param name="isFileLayout">type of in-memory PE layout, if true, file based layout otherwise, loaded layout</param>
 /// <param name="loadedPeAddress">
 /// Loaded PE image address or zero if the module is dynamic (generated by Reflection.Emit).
 /// Dynamic modules have their PDBs (if any) generated to an in-memory stream
 /// (pointed to by <paramref name="inMemoryPdbAddress"/> and <paramref name="inMemoryPdbSize"/>).
 /// </param>
 /// <param name="loadedPeSize">loaded PE image size</param>
 /// <param name="inMemoryPdbAddress">in memory PDB address or zero</param>
 /// <param name="inMemoryPdbSize">in memory PDB size</param>
 /// <returns>Symbol reader handle or zero if error</returns>
 private IntPtr LoadSymbolsForModule(
     IntPtr self,
     string assemblyPath,
     bool isFileLayout,
     ulong loadedPeAddress,
     uint loadedPeSize,
     ulong inMemoryPdbAddress,
     uint inMemoryPdbSize)
 {
     try
     {
         ISymbolFile symbolFile = null;
         if (loadedPeAddress != 0)
         {
             Stream peStream = _memoryService.CreateMemoryStream(loadedPeAddress, loadedPeSize);
             symbolFile = _symbolService.OpenSymbolFile(assemblyPath, isFileLayout, peStream);
         }
         if (inMemoryPdbAddress != 0)
         {
             Stream pdbStream = _memoryService.CreateMemoryStream(inMemoryPdbAddress, inMemoryPdbSize);
             symbolFile = _symbolService.OpenSymbolFile(pdbStream);
         }
         if (symbolFile != null)
         {
             GCHandle gch = GCHandle.Alloc(symbolFile);
             return(GCHandle.ToIntPtr(gch));
         }
     }
     catch (Exception ex)
     {
         Trace.TraceError($"LoadSymbolsForModule: {ex.Message}");
     }
     return(IntPtr.Zero);
 }