Browse Source

fix method view

pull/15/head
Eusebiu Marcu 15 years ago
parent
commit
e496051fa4
  1. 2
      src/AddIns/Debugger/Debugger.AddIn/Pads/Commands/ParallelStacksViewCommands.cs
  2. 35
      src/AddIns/Debugger/Debugger.AddIn/Pads/ParallelPad/ParallelStackPad.cs
  3. 13
      src/AddIns/Debugger/Debugger.AddIn/Pads/ParallelPad/ThreadStack.xaml.cs

2
src/AddIns/Debugger/Debugger.AddIn/Pads/Commands/ParallelStacksViewCommands.cs

@ -15,7 +15,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
get { return base.Owner; } get { return base.Owner; }
set { set {
if (!(value is ParallelStackPad)) if (!(value is ParallelStackPad))
throw new Exception("Owner has to be a AbstractConsolePad"); throw new Exception("Owner has to be a ParallelStackPad");
pad = value as ParallelStackPad; pad = value as ParallelStackPad;
base.Owner = value; base.Owner = value;
} }

35
src/AddIns/Debugger/Debugger.AddIn/Pads/ParallelPad/ParallelStackPad.cs

@ -66,7 +66,8 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
if (debuggedProcess == null || debuggedProcess.IsRunning) { if (debuggedProcess == null || debuggedProcess.IsRunning) {
return; return;
} }
OnReset(null, EventArgs.Empty);
currentThreadStacks.Clear();
if (ParallelStacksView == ParallelStacksView.Threads) if (ParallelStacksView == ParallelStacksView.Threads)
{ {
@ -124,7 +125,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
using(new PrintTimes("Graph refresh")) { using(new PrintTimes("Graph refresh")) {
// paint the ThreadStaks // paint the ThreadStaks
graph = new ParallelStacksGraph(); graph = new ParallelStacksGraph();
foreach (var stack in this.currentThreadStacks.FindAll(ts => ts.ThreadStackParent == null)) foreach (var stack in this.currentThreadStacks.FindAll(ts => ts.ThreadStackParents == null ))
{ {
graph.AddVertex(stack); graph.AddVertex(stack);
@ -190,6 +191,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
private void OnReset(object sender, EventArgs e) private void OnReset(object sender, EventArgs e)
{ {
currentThreadStacks.Clear(); currentThreadStacks.Clear();
selectedFrame = null;
} }
private void debuggedProcess_Paused(object sender, ProcessEventArgs e) private void debuggedProcess_Paused(object sender, ProcessEventArgs e)
@ -349,22 +351,24 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
} }
dynamic item = stack.ItemCollection[stack.ItemCollection.Count - 1]; dynamic item = stack.ItemCollection[stack.ItemCollection.Count - 1];
// add the parent to the parent // add the parent to the parent
if (stack.ThreadStackParent != null) { if (stack.ThreadStackParents != null) {
// remove stack from it's parent because it will have the commonParent as parent // remove stack from it's parent because it will have the commonParent as parent
stack.ThreadStackParent.ThreadStackChildren.Remove(stack); stack.ThreadStackParents[0].ThreadStackChildren.Remove(stack);
commonParent.ThreadStackParent = stack.ThreadStackParent; commonParent.ThreadStackParents = stack.ThreadStackParents.Clone();
commonParent.ThreadStackParent.ThreadStackChildren.Add(commonParent); commonParent.ThreadStackParents[0].ThreadStackChildren.Add(commonParent);
// set level // set level
commonParent.Level = stack.Level - 1; commonParent.Level = stack.Level - 1;
} }
else
stack.ThreadStackParents = new List<ThreadStack>();
// update thread ids // update thread ids
var parent = commonParent.ThreadStackParent; if (commonParent.ThreadStackParents != null) {
if (parent != null) { commonParent.ThreadStackParents[0].UpdateThreadIds(commonParent.ThreadIds.ToArray());
parent.UpdateThreadIds(commonParent.ThreadIds.ToArray());
} }
stack.ThreadStackParent = commonParent; stack.ThreadStackParents.Clear();
stack.ThreadStackParents.Add(commonParent);
string currentName = item.MethodName + stack.Level.ToString();; string currentName = item.MethodName + stack.Level.ToString();;
// add name or add to list // add name or add to list
@ -420,6 +424,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
common.UpdateThreadIds(selectedFrame.Thread.ID); common.UpdateThreadIds(selectedFrame.Thread.ID);
common.Process = debuggedProcess; common.Process = debuggedProcess;
common.ThreadStackChildren = new List<ThreadStack>(); common.ThreadStackChildren = new List<ThreadStack>();
common.ThreadStackParents = new List<ThreadStack>();
// for all thread stacks, split them in 2 : // for all thread stacks, split them in 2 :
// one that invokes the method frame, second that get's invoked by current method frame // one that invokes the method frame, second that get's invoked by current method frame
@ -432,9 +437,9 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
topStack.StackSelected += OnThreadStackSelected; topStack.StackSelected += OnThreadStackSelected;
topStack.FrameSelected += OnFrameSelected; topStack.FrameSelected += OnFrameSelected;
topStack.UpdateThreadIds(tuple.Item3.ToArray()); topStack.UpdateThreadIds(tuple.Item3.ToArray());
common.UpdateThreadIds(tuple.Item3.ToArray());
topStack.Process = debuggedProcess; topStack.Process = debuggedProcess;
topStack.ThreadStackParent = common; topStack.ThreadStackParents = new List<ThreadStack>();
topStack.ThreadStackParents.Add(common);
currentThreadStacks.Add(topStack); currentThreadStacks.Add(topStack);
common.ThreadStackChildren.Add(topStack); common.ThreadStackChildren.Add(topStack);
@ -451,7 +456,8 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
bottomStack.Process = debuggedProcess; bottomStack.Process = debuggedProcess;
bottomStack.ThreadStackChildren = new List<ThreadStack>(); bottomStack.ThreadStackChildren = new List<ThreadStack>();
bottomStack.ThreadStackChildren.Add(common); bottomStack.ThreadStackChildren.Add(common);
common.UpdateThreadIds(tuple.Item3.ToArray());
common.ThreadStackParents.Add(bottomStack);
currentThreadStacks.Add(bottomStack); currentThreadStacks.Add(bottomStack);
} }
} }
@ -539,7 +545,8 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
private void OnThreadStackSelected(object sender, EventArgs e) private void OnThreadStackSelected(object sender, EventArgs e)
{ {
foreach (var ts in this.currentThreadStacks) { foreach (var ts in this.currentThreadStacks) {
ts.IsSelected = false; if (ts.IsSelected)
ts.IsSelected = false;
ts.ClearImages(); ts.ClearImages();
} }
} }

13
src/AddIns/Debugger/Debugger.AddIn/Pads/ParallelPad/ThreadStack.xaml.cs

@ -79,7 +79,7 @@ namespace Debugger.AddIn.Pads.ParallelPad
} }
} }
public ThreadStack ThreadStackParent { get; set; } public List<ThreadStack> ThreadStackParents { get; set; }
public List<ThreadStack> ThreadStackChildren { get; set; } public List<ThreadStack> ThreadStackChildren { get; set; }
@ -134,11 +134,12 @@ namespace Debugger.AddIn.Pads.ParallelPad
private void SelectParent(bool isSelected) private void SelectParent(bool isSelected)
{ {
var ts = this.ThreadStackParent; if (this.ThreadStackParents == null || this.ThreadStackParents.Count == 0)
while(ts != null) { return;
ts.IsSelected = isSelected;
ts = ts.ThreadStackParent; foreach (var ts in this.ThreadStackParents)
} if (ts != null)
ts.IsSelected = isSelected;
} }
void datagrid_PreviewMouseMove(object sender, MouseEventArgs e) void datagrid_PreviewMouseMove(object sender, MouseEventArgs e)

Loading…
Cancel
Save