Browse Source

fix possible problem with dynamic assemblies in ClassBrowser

pull/80/head
Siegfried Pammer 12 years ago
parent
commit
a99ad62891
  1. 5
      src/AddIns/Debugger/Debugger.Core/Module.cs
  2. 9
      src/AddIns/Debugger/Debugger.Core/TypeSystemExtensions.cs

5
src/AddIns/Debugger/Debugger.Core/Module.cs

@ -71,7 +71,10 @@ namespace Debugger
if (symReader != null) if (symReader != null)
return symReader.GetUserEntryPoint(); return symReader.GetUserEntryPoint();
var info = TypeSystemExtensions.GetInfo(Assembly); var info = TypeSystemExtensions.GetInfo(Assembly);
var ep = info.CecilModule.EntryPoint; var cecilModule = info.CecilModule;
if (cecilModule == null)
return 0;
var ep = cecilModule.EntryPoint;
if (ep != null) if (ep != null)
return ep.MetadataToken.ToUInt32(); return ep.MetadataToken.ToUInt32();
return 0; return 0;

9
src/AddIns/Debugger/Debugger.Core/TypeSystemExtensions.cs

@ -138,8 +138,11 @@ namespace Debugger
internal static Task<IUnresolvedAssembly> LoadModuleAsync(Module module, ICorDebugModule corModule) internal static Task<IUnresolvedAssembly> LoadModuleAsync(Module module, ICorDebugModule corModule)
{ {
string name = corModule.GetName(); string name = corModule.GetName();
if (corModule.IsDynamic() == 1 || corModule.IsInMemory() == 1) if (corModule.IsDynamic() == 1 || corModule.IsInMemory() == 1) {
return Task.FromResult<IUnresolvedAssembly>(new DefaultUnresolvedAssembly(name)); var defaultUnresolvedAssembly = new DefaultUnresolvedAssembly(name);
weakTable.Add(defaultUnresolvedAssembly, new ModuleMetadataInfo(module, null));
return Task.FromResult<IUnresolvedAssembly>(defaultUnresolvedAssembly);
}
//return Task.FromResult(LoadModule(module, name)); //return Task.FromResult(LoadModule(module, name));
return Task.Run(() => LoadModule(module, name)); return Task.Run(() => LoadModule(module, name));
@ -181,6 +184,8 @@ namespace Debugger
ModuleMetadataInfo info; ModuleMetadataInfo info;
if (!weakTable.TryGetValue(module.UnresolvedAssembly, out info)) if (!weakTable.TryGetValue(module.UnresolvedAssembly, out info))
throw new ArgumentException("The assembly was not from the debugger type system"); throw new ArgumentException("The assembly was not from the debugger type system");
if (info.CecilModule == null)
return EmptyList<string>.Instance;
return info.CecilModule.AssemblyReferences.Select(r => r.FullName); return info.CecilModule.AssemblyReferences.Select(r => r.FullName);
} }

Loading…
Cancel
Save