Browse Source

fix Debugger: Move mouse over static event -> crash 'unknown member type'

pull/45/merge
Siegfried Pammer 12 years ago
parent
commit
1300a4bcd9
  1. 5
      src/AddIns/Debugger/Debugger.AddIn/NRefactory/ExpressionEvaluationVisitor.cs
  2. 12
      src/AddIns/Debugger/Debugger.Core/Value.cs

5
src/AddIns/Debugger/Debugger.AddIn/NRefactory/ExpressionEvaluationVisitor.cs

@ -464,7 +464,10 @@ namespace Debugger.AddIn
string Visit(MemberResolveResult result) string Visit(MemberResolveResult result)
{ {
return Print(result.TargetResult) + "." + result.Member.Name; string text = Print(result.TargetResult);
if (!string.IsNullOrWhiteSpace(text))
text += ".";
return text + result.Member.Name;
} }
string Visit(OperatorResolveResult result) string Visit(OperatorResolveResult result)

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

@ -416,6 +416,16 @@ namespace Debugger
return GetPropertyValue(evalThread, objectInstance, (IProperty)memberInfo, arguments); return GetPropertyValue(evalThread, objectInstance, (IProperty)memberInfo, arguments);
} else if (memberInfo is IMethod) { } else if (memberInfo is IMethod) {
return InvokeMethod(evalThread, objectInstance, (IMethod)memberInfo, arguments); return InvokeMethod(evalThread, objectInstance, (IMethod)memberInfo, arguments);
} else if (memberInfo is IEvent) {
string name = memberInfo.Name;
IField f = memberInfo.DeclaringType.GetFields(m => m.Name == name, GetMemberOptions.None).FirstOrDefault();
if (f == null) {
name += "Event";
f = memberInfo.DeclaringType.GetFields(m => m.Name == name, GetMemberOptions.None).FirstOrDefault();
}
if (f == null)
throw new GetValueException("Cannot retrieve event value");
return GetFieldValue(evalThread, objectInstance, f);
} }
throw new DebuggerException("Unknown member type: " + memberInfo.GetType()); throw new DebuggerException("Unknown member type: " + memberInfo.GetType());
} }
@ -424,7 +434,7 @@ namespace Debugger
{ {
Value val = GetFieldValue(evalThread, objectInstance, fieldInfo); Value val = GetFieldValue(evalThread, objectInstance, fieldInfo);
if (!newValue.Type.GetDefinition().IsDerivedFrom(fieldInfo.Type.GetDefinition())) if (!newValue.Type.GetDefinition().IsDerivedFrom(fieldInfo.Type.GetDefinition()))
throw new GetValueException("Can not assign {0} to {1}", newValue.Type.FullName, fieldInfo.Type.FullName); throw new GetValueException("Cannot assign {0} to {1}", newValue.Type.FullName, fieldInfo.Type.FullName);
val.SetValue(evalThread, newValue); val.SetValue(evalThread, newValue);
} }

Loading…
Cancel
Save