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 @@ -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 @@ -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) {
}

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

@ -20,7 +20,7 @@ namespace Debugger.AddIn.TreeModel @@ -20,7 +20,7 @@ namespace Debugger.AddIn.TreeModel
public static IEnumerable<AbstractNode> GetChildNodesOfArray(Expression expression, ArrayDimensions 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 @@ -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 @@ -78,7 +78,7 @@ namespace Debugger.AddIn.TreeModel
IEnumerable<AbstractNode> 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 @@ -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 @@ -129,7 +129,7 @@ namespace Debugger.AddIn.TreeModel
IEnumerable<AbstractNode> GetChildNodes()
{
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 @@ -32,7 +32,7 @@ namespace Debugger.AddIn.TreeModel
IEnumerable<AbstractNode> GetChildNodes()
{
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 @@ -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;

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

@ -28,7 +28,18 @@ namespace Debugger.AddIn.TreeModel @@ -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;

4
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Process-StateControl.cs

@ -102,7 +102,7 @@ namespace Debugger @@ -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 @@ -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;

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

@ -38,12 +38,13 @@ namespace Debugger @@ -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);
}
}

Loading…
Cancel
Save