From f45a80f29b1ac6be264fd1f8412e532bc6cc9e8e Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Fri, 14 Jun 2013 11:06:35 +0200 Subject: [PATCH] fix Debugger: Moving mouse over a static void method taking no arguments causes a DebuggerException. It seems the debugger is trying to run the method? --- .../NRefactory/ExpressionEvaluationVisitor.cs | 4 +++- .../Debugger/Debugger.AddIn/Service/WindowsDebugger.cs | 8 +++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/AddIns/Debugger/Debugger.AddIn/NRefactory/ExpressionEvaluationVisitor.cs b/src/AddIns/Debugger/Debugger.AddIn/NRefactory/ExpressionEvaluationVisitor.cs index 3d26764c76..af86919158 100644 --- a/src/AddIns/Debugger/Debugger.AddIn/NRefactory/ExpressionEvaluationVisitor.cs +++ b/src/AddIns/Debugger/Debugger.AddIn/NRefactory/ExpressionEvaluationVisitor.cs @@ -119,6 +119,8 @@ namespace Debugger.AddIn throw new GetValueException("An object reference is required for the non-static field, method, or property '" + importedMember.FullName + "'"); target = Convert(result.TargetResult); } + if (!allowMethodInvoke && (importedMember is IMethod)) + throw new InvalidOperationException("Method invocation not allowed in the current context!"); Value val = Value.GetMemberValue(evalThread, target, importedMember); if (val == null) throw new GetValueException("Member not found!"); @@ -482,7 +484,7 @@ namespace Debugger.AddIn string Visit(TypeResolveResult result) { - throw new NotImplementedException(); + return new CSharpAmbience().ConvertType(result.Type); } string Visit(UnknownMemberResolveResult result) diff --git a/src/AddIns/Debugger/Debugger.AddIn/Service/WindowsDebugger.cs b/src/AddIns/Debugger/Debugger.AddIn/Service/WindowsDebugger.cs index e62001b7ba..6364a902e6 100644 --- a/src/AddIns/Debugger/Debugger.AddIn/Service/WindowsDebugger.cs +++ b/src/AddIns/Debugger/Debugger.AddIn/Service/WindowsDebugger.cs @@ -625,11 +625,12 @@ namespace ICSharpCode.SharpDevelop.Services var resolveResult = e.ResolveResult; if (resolveResult == null) return; - if (resolveResult is LocalResolveResult || resolveResult is MemberResolveResult || resolveResult is InvocationResolveResult) { + if (resolveResult is LocalResolveResult || resolveResult is MemberResolveResult) { string text = string.Empty; try { text = new ResolveResultPrettyPrinter().Print(resolveResult); - } catch (NotImplementedException) { + } catch (NotImplementedException ex) { + SD.Log.Warn(ex); } Func getValue = delegate { ExpressionEvaluationVisitor eval = new ExpressionEvaluationVisitor(CurrentStackFrame, EvalThread, CurrentStackFrame.AppDomain.Compilation); @@ -638,7 +639,8 @@ namespace ICSharpCode.SharpDevelop.Services try { var rootNode = new ValueNode(ClassBrowserIconService.LocalVariable, text, getValue); e.SetToolTip(new DebuggerTooltipControl(rootNode)); - } catch (InvalidOperationException) { + } catch (InvalidOperationException ex) { + SD.Log.Warn(ex); } } }