diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Service/WindowsDebugger.cs b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Service/WindowsDebugger.cs index 50699a0c72..3c0b0bd50b 100644 --- a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Service/WindowsDebugger.cs +++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Service/WindowsDebugger.cs @@ -295,7 +295,7 @@ namespace ICSharpCode.SharpDevelop.Services } else { try { currentTooltipExpression = val.Expression; - currentTooltipRow = new DynamicTreeDebuggerRow(DebuggedProcess, new ValueNode(val)); + currentTooltipRow = new DynamicTreeDebuggerRow(DebuggedProcess, ValueNode.Create(val.Expression)); return new DebuggerGridControl(currentTooltipRow); } catch (AbortedBecauseDebuggeeResumedException) { return null; @@ -445,7 +445,7 @@ namespace ICSharpCode.SharpDevelop.Services using(new PrintTimes("Update tooltip")) { try { Utils.DoEvents(debuggedProcess.DebuggeeState); - AbstractNode updatedNode = Debugger.AddIn.TreeModel.Utils.CreateNode(currentTooltipExpression); + AbstractNode updatedNode = ValueNode.Create(currentTooltipExpression); currentTooltipRow.SetContentRecursive(updatedNode); } catch (AbortedBecauseDebuggeeResumedException) { } diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/TreeModel/ArrayRangeNode.cs b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/TreeModel/ArrayRangeNode.cs index 98e9c9cca2..fe165e3d34 100644 --- a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/TreeModel/ArrayRangeNode.cs +++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/TreeModel/ArrayRangeNode.cs @@ -20,7 +20,7 @@ namespace Debugger.AddIn.TreeModel public static IEnumerable GetChildNodesOfArray(Expression expression, ArrayDimensions dimensions) { foreach(Expression childExpr in expression.AppendIndexers(dimensions)) { - yield return Utils.CreateNode(childExpr); + yield return ValueNode.Create(childExpr); } } } diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/TreeModel/ChildNodesOfObject.cs b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/TreeModel/ChildNodesOfObject.cs index 0b687a344d..ca1cd645b3 100644 --- a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/TreeModel/ChildNodesOfObject.cs +++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/TreeModel/ChildNodesOfObject.cs @@ -33,7 +33,7 @@ namespace Debugger.AddIn.TreeModel yield return new StaticMembersNode(targetObject, shownType); } foreach(Expression childExpr in targetObject.AppendObjectMembers(shownType, Flags)) { - yield return Utils.CreateNode(childExpr); + yield return ValueNode.Create(childExpr); } } } @@ -78,7 +78,7 @@ namespace Debugger.AddIn.TreeModel IEnumerable GetChildNodes() { foreach(Expression childExpr in targetObject.AppendObjectMembers(shownType, Flags)) { - yield return Utils.CreateNode(childExpr); + yield return ValueNode.Create(childExpr); } } } @@ -105,7 +105,7 @@ namespace Debugger.AddIn.TreeModel yield return new NonPublicStaticMembersNode(targetObject, shownType); } foreach(Expression childExpr in targetObject.AppendObjectMembers(shownType, Flags)) { - yield return Utils.CreateNode(childExpr); + yield return ValueNode.Create(childExpr); } } } @@ -129,7 +129,7 @@ namespace Debugger.AddIn.TreeModel IEnumerable GetChildNodes() { foreach(Expression childExpr in targetObject.AppendObjectMembers(shownType, Flags)) { - yield return Utils.CreateNode(childExpr); + yield return ValueNode.Create(childExpr); } } } diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/TreeModel/StackFrameNode.cs b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/TreeModel/StackFrameNode.cs index d9d8ac997a..c656e20325 100644 --- a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/TreeModel/StackFrameNode.cs +++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/TreeModel/StackFrameNode.cs @@ -32,7 +32,7 @@ namespace Debugger.AddIn.TreeModel IEnumerable GetChildNodes() { foreach(Expression expr in Expression.MethodVariables(stackFrame.MethodInfo)) { - yield return Utils.CreateNode(expr); + yield return ValueNode.Create(expr); } } } diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/TreeModel/Utils.cs b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/TreeModel/Utils.cs index 2a71d54567..0f7e580e96 100644 --- a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/TreeModel/Utils.cs +++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/TreeModel/Utils.cs @@ -35,16 +35,6 @@ namespace Debugger.AddIn.TreeModel } } - public static AbstractNode CreateNode(Expression expression) - { - try { - Value val = expression.Evaluate(WindowsDebugger.DebuggedProcess.SelectedStackFrame); - return new ValueNode(val); - } catch (GetValueException e) { - return new ErrorNode(expression, e); - } - } - public static WindowsDebugger WindowsDebugger { get { return (WindowsDebugger)DebuggerService.CurrentDebugger; diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/TreeModel/ValueNode.cs b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/TreeModel/ValueNode.cs index 031d6f6493..7c42ec4727 100644 --- a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/TreeModel/ValueNode.cs +++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/TreeModel/ValueNode.cs @@ -28,7 +28,18 @@ namespace Debugger.AddIn.TreeModel get { return expression; } } - public ValueNode(Value val) + public static AbstractNode Create(Expression expression) + { + try { + Value val = expression.Evaluate(WindowsDebugger.DebuggedProcess.SelectedStackFrame); + return new ValueNode(val); + } catch (GetValueException e) { + return new ErrorNode(expression, e); + } + } + + // NB: This can also throw GetValueException on InvokeToString() + ValueNode(Value val) { this.expression = val.Expression; diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Process-StateControl.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Process-StateControl.cs index 1cfb2044bf..5a4bf550fb 100644 --- a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Process-StateControl.cs +++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Process-StateControl.cs @@ -102,7 +102,7 @@ namespace Debugger throw new DebuggerException("Debugee state already created"); } if (pauseSession == null) { - throw new DebuggerException("Pause session must exist"); + throw new DebuggerException("Pause session must exist (update order error)"); } debuggeeState = new DebuggeeState(this); } @@ -113,7 +113,7 @@ namespace Debugger throw new DebuggerException("Debugee state already expired"); } if (pauseSession != null) { - throw new DebuggerException("Pause session must not exist"); + throw new DebuggerException("Pause session must not exist (update order error)"); } DebuggeeState oldDebugeeState = debuggeeState; debuggeeState = null; diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Process.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Process.cs index 1577762a20..617b24e832 100644 --- a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Process.cs +++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Process.cs @@ -38,12 +38,13 @@ namespace Debugger if (Expired != null) { Expired(this, new ProcessEventArgs(this)); } - if (DebuggeeState != null) { - ExpireDebuggeeState(); - } + // Expire pause seesion first if (PauseSession != null) { ExpirePauseSession(); } + if (DebuggeeState != null) { + ExpireDebuggeeState(); + } debugger.RemoveProcess(this); } }