|
|
@ -168,20 +168,24 @@ namespace ICSharpCode.ILSpy |
|
|
|
|
|
|
|
|
|
|
|
private void LoadSymbols(PEFile module) |
|
|
|
private void LoadSymbols(PEFile module) |
|
|
|
{ |
|
|
|
{ |
|
|
|
var reader = module.Reader; |
|
|
|
try { |
|
|
|
// try to open portable pdb file/embedded pdb info:
|
|
|
|
var reader = module.Reader; |
|
|
|
if (reader.TryOpenAssociatedPortablePdb(fileName, OpenStream, out var provider, out var pdbFileName)) { |
|
|
|
// try to open portable pdb file/embedded pdb info:
|
|
|
|
debugInfoProvider = new PortableDebugInfoProvider(pdbFileName, provider); |
|
|
|
if (reader.TryOpenAssociatedPortablePdb(fileName, OpenStream, out var provider, out var pdbFileName)) { |
|
|
|
} else { |
|
|
|
debugInfoProvider = new PortableDebugInfoProvider(pdbFileName, provider); |
|
|
|
// search for pdb in same directory as dll
|
|
|
|
} else { |
|
|
|
string pdbDirectory = Path.GetDirectoryName(fileName); |
|
|
|
// search for pdb in same directory as dll
|
|
|
|
pdbFileName = Path.Combine(pdbDirectory, Path.GetFileNameWithoutExtension(fileName) + ".pdb"); |
|
|
|
string pdbDirectory = Path.GetDirectoryName(fileName); |
|
|
|
if (File.Exists(pdbFileName)) { |
|
|
|
pdbFileName = Path.Combine(pdbDirectory, Path.GetFileNameWithoutExtension(fileName) + ".pdb"); |
|
|
|
debugInfoProvider = new DiaSymNativeDebugInfoProvider(module, pdbFileName, OpenStream(pdbFileName)); |
|
|
|
if (File.Exists(pdbFileName)) { |
|
|
|
return; |
|
|
|
debugInfoProvider = new DiaSymNativeDebugInfoProvider(module, pdbFileName, OpenStream(pdbFileName)); |
|
|
|
} |
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// TODO: use symbol cache, get symbols from microsoft
|
|
|
|
// TODO: use symbol cache, get symbols from microsoft
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} catch (BadImageFormatException) { |
|
|
|
|
|
|
|
// Ignore PDB load errors
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
Stream OpenStream(string fileName) |
|
|
|
Stream OpenStream(string fileName) |
|
|
|