@@ -73,33 +73,45 @@ private DatadogMetadataReader(PEReader peReader, MetadataReader metadataReader,
73
73
return null ;
74
74
}
75
75
76
- // For metadata we are always using System.Reflection.Metadata
77
- // For PDB, Reflection.Metadata for portable and embedded PDB and dnlib for windows PDB
78
- var peReader = new PEReader ( File . OpenRead ( assembly . Location ) , PEStreamOptions . PrefetchMetadata | PEStreamOptions . PrefetchEntireImage ) ;
79
- MetadataReader metadataReader = peReader . GetMetadataReader ( MetadataReaderOptions . Default ) ;
80
- MetadataReader ? pdbReader ;
81
- if ( peReader . TryOpenAssociatedPortablePdb ( assembly . Location , File . OpenRead , out var metadataReaderProvider , out var pdbPath ) )
76
+ try
82
77
{
83
- pdbReader = metadataReaderProvider ! . GetMetadataReader ( MetadataReaderOptions . Default , MetadataStringDecoder . DefaultUTF8 ) ;
84
- return new DatadogMetadataReader ( peReader , metadataReader , pdbReader , pdbPath ?? assembly . Location , null , null ) ;
85
- }
78
+ // For metadata we are always using System.Reflection.Metadata
79
+ // For PDB, Reflection.Metadata for portable and embedded PDB and dnlib for windows PDB
80
+ var peReader = new PEReader ( File . OpenRead ( assembly . Location ) , PEStreamOptions . PrefetchMetadata | PEStreamOptions . PrefetchEntireImage ) ;
81
+ MetadataReader metadataReader = peReader . GetMetadataReader ( MetadataReaderOptions . Default ) ;
82
+ if ( peReader . TryOpenAssociatedPortablePdb ( assembly . Location , File . OpenRead , out var metadataReaderProvider , out var pdbPath ) )
83
+ {
84
+ var pdbReader = metadataReaderProvider ! . GetMetadataReader ( MetadataReaderOptions . Default , MetadataStringDecoder . DefaultUTF8 ) ;
85
+ return new DatadogMetadataReader ( peReader , metadataReader , pdbReader , pdbPath ?? assembly . Location , null , null ) ;
86
+ }
87
+
88
+ if ( ! TryFindPdbFile ( assembly . Location , out var pdbFullPath ) )
89
+ {
90
+ return new DatadogMetadataReader ( peReader , metadataReader , null , null , null , null ) ;
91
+ }
92
+
93
+ var module = Datadog . Trace . Vendors . dnlib . DotNet . ModuleDefMD . Load ( assembly . ManifestModule , new Datadog . Trace . Vendors . dnlib . DotNet . ModuleCreationOptions { TryToLoadPdbFromDisk = false } ) ;
94
+ var pdbStream = Datadog . Trace . Vendors . dnlib . IO . DataReaderFactoryFactory . Create ( pdbFullPath , false ) ;
95
+ var dnlibReader = Datadog . Trace . Vendors . dnlib . DotNet . Pdb . SymbolReaderFactory . Create ( Datadog . Trace . Vendors . dnlib . DotNet . ModuleCreationOptions . DefaultPdbReaderOptions , module . Metadata , pdbStream ) ;
96
+ if ( dnlibReader == null )
97
+ {
98
+ return new DatadogMetadataReader ( peReader , metadataReader , null , null , null , null ) ;
99
+ }
86
100
87
- if ( ! TryFindPdbFile ( assembly . Location , out var pdbFullPath ) )
101
+ dnlibReader . Initialize ( module ) ;
102
+ module . LoadPdb ( dnlibReader ) ;
103
+ return new DatadogMetadataReader ( peReader , metadataReader , null , pdbFullPath , dnlibReader , module ) ;
104
+ }
105
+ catch ( IOException e )
88
106
{
89
- return new DatadogMetadataReader ( peReader , metadataReader , null , null , null , null ) ;
107
+ Logger . Debug ( "Error while trying to get a pdb for {Assembly} in location: {AssemblyLocation}. Error: {Error}" , assembly . FullName , assembly . Location , e . Message ) ;
108
+ return null ;
90
109
}
91
-
92
- var module = Datadog . Trace . Vendors . dnlib . DotNet . ModuleDefMD . Load ( assembly . ManifestModule , new Datadog . Trace . Vendors . dnlib . DotNet . ModuleCreationOptions { TryToLoadPdbFromDisk = false } ) ;
93
- var pdbStream = Datadog . Trace . Vendors . dnlib . IO . DataReaderFactoryFactory . Create ( pdbFullPath , false ) ;
94
- var dnlibReader = Datadog . Trace . Vendors . dnlib . DotNet . Pdb . SymbolReaderFactory . Create ( Datadog . Trace . Vendors . dnlib . DotNet . ModuleCreationOptions . DefaultPdbReaderOptions , module . Metadata , pdbStream ) ;
95
- if ( dnlibReader == null )
110
+ catch ( Exception e )
96
111
{
97
- return new DatadogMetadataReader ( peReader , metadataReader , null , null , null , null ) ;
112
+ Logger . Error ( e , "Error while trying to get a pdb for {Assembly} in location: {AssemblyLocation}" , assembly . FullName , assembly . Location ) ;
113
+ return null ;
98
114
}
99
-
100
- dnlibReader . Initialize ( module ) ;
101
- module . LoadPdb ( dnlibReader ) ;
102
- return new DatadogMetadataReader ( peReader , metadataReader , null , pdbFullPath , dnlibReader , module ) ;
103
115
}
104
116
105
117
private static bool TryFindPdbFile ( string assemblyLocation , [ NotNullWhen ( true ) ] out string ? pdbFullPath )
0 commit comments