diff --git a/src/AddIns/Debugger/Debugger.Core/MetaData/DebugMethodInfo.cs b/src/AddIns/Debugger/Debugger.Core/MetaData/DebugMethodInfo.cs
index 95140a490e..fb9a330207 100644
--- a/src/AddIns/Debugger/Debugger.Core/MetaData/DebugMethodInfo.cs
+++ b/src/AddIns/Debugger/Debugger.Core/MetaData/DebugMethodInfo.cs
@@ -337,10 +337,9 @@ namespace Debugger.MetaData
if (!success) return null;
- MemberInfo member = declaringType.GetMember(token);
-
- if (member == null) return null;
- if (!(member is DebugFieldInfo)) return null;
+ // The token can be a field in different class (static or instance in base class) - so it might not be found in the next call
+ MemberInfo member;
+ if (!declaringType.TryGetMember(token, out member)) return null;
if (this.Process.Options.Verbose) {
this.Process.TraceMessage(string.Format("Found backing field for {0}: {1}", this.FullName, member.Name));
diff --git a/src/AddIns/Debugger/Debugger.Core/MetaData/DebugType.cs b/src/AddIns/Debugger/Debugger.Core/MetaData/DebugType.cs
index 42e5a28e71..542e283938 100644
--- a/src/AddIns/Debugger/Debugger.Core/MetaData/DebugType.cs
+++ b/src/AddIns/Debugger/Debugger.Core/MetaData/DebugType.cs
@@ -281,6 +281,12 @@ namespace Debugger.MetaData
return membersByToken[(int)token];
}
+ /// Return member with the given token
+ public bool TryGetMember(uint token, out MemberInfo memberInfo)
+ {
+ return membersByToken.TryGetValue((int)token, out memberInfo);
+ }
+
public T GetMember(string name, BindingFlags bindingFlags, Predicate filter) where T:MemberInfo
{
T[] res = GetMembers(name, bindingFlags, filter);