Browse Source

fix #515: Could not find class for token exception when stepping into code

pull/516/head
Siegfried Pammer 11 years ago
parent
commit
4ac976c1f2
  1. 12
      src/AddIns/Debugger/Debugger.Core/TypeSystemExtensions.cs

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

@ -155,6 +155,12 @@ namespace Debugger @@ -155,6 +155,12 @@ namespace Debugger
string name = corModule.GetName();
if (corModule.IsDynamic() == 1 || corModule.IsInMemory() == 1) {
var defaultUnresolvedAssembly = new DefaultUnresolvedAssembly(name);
var defaultUnresolvedTypeDefinition = new DefaultUnresolvedTypeDefinition("UnknownDynamicType");
var defaultUnresolvedMethod = new DefaultUnresolvedMethod(defaultUnresolvedTypeDefinition, "UnknownMethod");
var defaultUnresolvedField = new DefaultUnresolvedField(defaultUnresolvedTypeDefinition, "UnknownField");
defaultUnresolvedTypeDefinition.Members.Add(defaultUnresolvedMethod);
defaultUnresolvedTypeDefinition.Members.Add(defaultUnresolvedField);
defaultUnresolvedAssembly.AddTypeDefinition(defaultUnresolvedTypeDefinition);
weakTable.Add(defaultUnresolvedAssembly, new ModuleMetadataInfo(module, null));
return Task.FromResult<IUnresolvedAssembly>(defaultUnresolvedAssembly);
}
@ -527,6 +533,9 @@ namespace Debugger @@ -527,6 +533,9 @@ namespace Debugger
public static IMethod Import(this ICompilation compilation, ICorDebugFunction corFunction)
{
Module module = compilation.GetAppDomain().Process.GetModule(corFunction.GetModule());
if (module.IsDynamic || module.IsInMemory) {
return module.Assembly.GetTypeDefinition("", "UnknownDynamicType").Methods.First();
}
var info = GetInfo(module.Assembly);
uint functionToken = corFunction.GetToken();
var unresolvedMethod = info.GetMethodFromToken(functionToken);
@ -547,6 +556,9 @@ namespace Debugger @@ -547,6 +556,9 @@ namespace Debugger
public static IField ImportField(this IType declaringType, uint fieldToken)
{
var module = declaringType.GetDefinition().ParentAssembly.GetModule();
if (module.IsDynamic || module.IsInMemory) {
return module.Assembly.GetTypeDefinition("", "UnknownDynamicType").Fields.First();
}
var info = GetInfo(module.Assembly);
return declaringType.GetFields(f => info.GetMetadataToken(f) == fieldToken, GetMemberOptions.IgnoreInheritedMembers).SingleOrDefault();
}

Loading…
Cancel
Save