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);