Browse Source

Correct order of events when process is killed.

Only ValueNode.Create can be used to create node.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@2916 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
David Srbecký 18 years ago
parent
commit
f7aa5f0520
  1. 4
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Service/WindowsDebugger.cs
  2. 2
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/TreeModel/ArrayRangeNode.cs
  3. 8
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/TreeModel/ChildNodesOfObject.cs
  4. 2
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/TreeModel/StackFrameNode.cs
  5. 10
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/TreeModel/Utils.cs
  6. 13
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/TreeModel/ValueNode.cs
  7. 4
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Process-StateControl.cs
  8. 7
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Process.cs

4
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Service/WindowsDebugger.cs

@ -295,7 +295,7 @@ namespace ICSharpCode.SharpDevelop.Services
} else { } else {
try { try {
currentTooltipExpression = val.Expression; currentTooltipExpression = val.Expression;
currentTooltipRow = new DynamicTreeDebuggerRow(DebuggedProcess, new ValueNode(val)); currentTooltipRow = new DynamicTreeDebuggerRow(DebuggedProcess, ValueNode.Create(val.Expression));
return new DebuggerGridControl(currentTooltipRow); return new DebuggerGridControl(currentTooltipRow);
} catch (AbortedBecauseDebuggeeResumedException) { } catch (AbortedBecauseDebuggeeResumedException) {
return null; return null;
@ -445,7 +445,7 @@ namespace ICSharpCode.SharpDevelop.Services
using(new PrintTimes("Update tooltip")) { using(new PrintTimes("Update tooltip")) {
try { try {
Utils.DoEvents(debuggedProcess.DebuggeeState); Utils.DoEvents(debuggedProcess.DebuggeeState);
AbstractNode updatedNode = Debugger.AddIn.TreeModel.Utils.CreateNode(currentTooltipExpression); AbstractNode updatedNode = ValueNode.Create(currentTooltipExpression);
currentTooltipRow.SetContentRecursive(updatedNode); currentTooltipRow.SetContentRecursive(updatedNode);
} catch (AbortedBecauseDebuggeeResumedException) { } catch (AbortedBecauseDebuggeeResumedException) {
} }

2
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/TreeModel/ArrayRangeNode.cs

@ -20,7 +20,7 @@ namespace Debugger.AddIn.TreeModel
public static IEnumerable<AbstractNode> GetChildNodesOfArray(Expression expression, ArrayDimensions dimensions) public static IEnumerable<AbstractNode> GetChildNodesOfArray(Expression expression, ArrayDimensions dimensions)
{ {
foreach(Expression childExpr in expression.AppendIndexers(dimensions)) { foreach(Expression childExpr in expression.AppendIndexers(dimensions)) {
yield return Utils.CreateNode(childExpr); yield return ValueNode.Create(childExpr);
} }
} }
} }

8
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); yield return new StaticMembersNode(targetObject, shownType);
} }
foreach(Expression childExpr in targetObject.AppendObjectMembers(shownType, Flags)) { 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<AbstractNode> GetChildNodes() IEnumerable<AbstractNode> GetChildNodes()
{ {
foreach(Expression childExpr in targetObject.AppendObjectMembers(shownType, Flags)) { 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); yield return new NonPublicStaticMembersNode(targetObject, shownType);
} }
foreach(Expression childExpr in targetObject.AppendObjectMembers(shownType, Flags)) { 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<AbstractNode> GetChildNodes() IEnumerable<AbstractNode> GetChildNodes()
{ {
foreach(Expression childExpr in targetObject.AppendObjectMembers(shownType, Flags)) { foreach(Expression childExpr in targetObject.AppendObjectMembers(shownType, Flags)) {
yield return Utils.CreateNode(childExpr); yield return ValueNode.Create(childExpr);
} }
} }
} }

2
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/TreeModel/StackFrameNode.cs

@ -32,7 +32,7 @@ namespace Debugger.AddIn.TreeModel
IEnumerable<AbstractNode> GetChildNodes() IEnumerable<AbstractNode> GetChildNodes()
{ {
foreach(Expression expr in Expression.MethodVariables(stackFrame.MethodInfo)) { foreach(Expression expr in Expression.MethodVariables(stackFrame.MethodInfo)) {
yield return Utils.CreateNode(expr); yield return ValueNode.Create(expr);
} }
} }
} }

10
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 { public static WindowsDebugger WindowsDebugger {
get { get {
return (WindowsDebugger)DebuggerService.CurrentDebugger; return (WindowsDebugger)DebuggerService.CurrentDebugger;

13
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/TreeModel/ValueNode.cs

@ -28,7 +28,18 @@ namespace Debugger.AddIn.TreeModel
get { return expression; } 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; this.expression = val.Expression;

4
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"); throw new DebuggerException("Debugee state already created");
} }
if (pauseSession == null) { if (pauseSession == null) {
throw new DebuggerException("Pause session must exist"); throw new DebuggerException("Pause session must exist (update order error)");
} }
debuggeeState = new DebuggeeState(this); debuggeeState = new DebuggeeState(this);
} }
@ -113,7 +113,7 @@ namespace Debugger
throw new DebuggerException("Debugee state already expired"); throw new DebuggerException("Debugee state already expired");
} }
if (pauseSession != null) { 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 oldDebugeeState = debuggeeState;
debuggeeState = null; debuggeeState = null;

7
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Process.cs

@ -38,12 +38,13 @@ namespace Debugger
if (Expired != null) { if (Expired != null) {
Expired(this, new ProcessEventArgs(this)); Expired(this, new ProcessEventArgs(this));
} }
if (DebuggeeState != null) { // Expire pause seesion first
ExpireDebuggeeState();
}
if (PauseSession != null) { if (PauseSession != null) {
ExpirePauseSession(); ExpirePauseSession();
} }
if (DebuggeeState != null) {
ExpireDebuggeeState();
}
debugger.RemoveProcess(this); debugger.RemoveProcess(this);
} }
} }

Loading…
Cancel
Save