public ISymbolReader LoadPdbForModule(ModuleDefinition module)
{
using (Tracer t = new Tracer(myType, "LoadPdbForModule"))
{
string fileName = module.Assembly.MainModule.FullyQualifiedName;
t.Info("Module file name: {0}", fileName);
ISymbolReader reader = null;
if (!this.myFile2PdbMap.TryGetValue(fileName, out reader))
{
if (this.myFailedPdbs.Contains(fileName))
{
t.Warning("This pdb could not be successfully downloaded");
return reader;
}
for (int i = 0; i < 2; i++)
{
try
{
reader = this.myPdbFactory.GetSymbolReader(module, fileName);
this.myFile2PdbMap[fileName] = reader;
break;
}
catch (Exception ex)
{
t.Error(Level.L3, ex, "Pdb did not match or it is not present");
string pdbFileName = Path.Combine(Path.GetDirectoryName(fileName), Path.GetFileNameWithoutExtension(fileName) + ".pdb");
try
{
File.Delete(pdbFileName);
}
catch (Exception delex)
{
t.Error(Level.L2, delex, "Could not delete pdb {0}", pdbFileName);
}
// When we have symbol server we try to make us of it for matches.
if (String.IsNullOrEmpty(this.mySymbolServer))
{
break;
}
t.Info("Try to download pdb from symbol server {0}", this.mySymbolServer);
bool bDownloaded = this.myDownLoader.DownloadPdbs(new FileQuery(fileName), this.mySymbolServer);
t.Info("Did download pdb {0} from symbol server with return code: {1}", fileName, bDownloaded);
if (bDownloaded == false || i == 1) // second try did not work out as well
{
this.myFailedPdbs.Add(fileName);
break;
}
}
}
}
return reader;
}
}