diff --git a/src/AddIns/Debugger/Debugger.AddIn/Debugger.AddIn.csproj b/src/AddIns/Debugger/Debugger.AddIn/Debugger.AddIn.csproj
index c84a269c14..f1d8ee4c70 100644
--- a/src/AddIns/Debugger/Debugger.AddIn/Debugger.AddIn.csproj
+++ b/src/AddIns/Debugger/Debugger.AddIn/Debugger.AddIn.csproj
@@ -125,6 +125,7 @@
+
ThreadStack.xaml
Code
diff --git a/src/AddIns/Debugger/Debugger.AddIn/Pads/ParallelPad/ParallelStackPad.cs b/src/AddIns/Debugger/Debugger.AddIn/Pads/ParallelPad/ParallelStackPad.cs
index 2df381742d..b1887c9bc0 100644
--- a/src/AddIns/Debugger/Debugger.AddIn/Pads/ParallelPad/ParallelStackPad.cs
+++ b/src/AddIns/Debugger/Debugger.AddIn/Pads/ParallelPad/ParallelStackPad.cs
@@ -13,9 +13,13 @@ using System.Windows.Media;
using Debugger;
using Debugger.AddIn.Pads.ParallelPad;
using Debugger.AddIn.TreeModel;
+using ICSharpCode.AvalonEdit.Rendering;
using ICSharpCode.Core;
using ICSharpCode.Core.Presentation;
+using ICSharpCode.NRefactory;
+using ICSharpCode.SharpDevelop.Bookmarks;
using ICSharpCode.SharpDevelop.Debugging;
+using ICSharpCode.SharpDevelop.Editor;
using ICSharpCode.SharpDevelop.Gui.Pads;
namespace ICSharpCode.SharpDevelop.Gui.Pads
@@ -154,6 +158,9 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
{
currentThreadStacks.Clear();
selectedFrame = null;
+
+ // remove all
+ BookmarkManager.RemoveAll(b => b is SelectedFrameBookmark);
}
private void debuggedProcess_Paused(object sender, ProcessEventArgs e)
@@ -436,7 +443,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
private void CreateThreadStack(Thread thread)
{
var items = CreateItems(thread);
- if (items.Count == 0)
+ if (items == null || items.Count == 0)
return;
ThreadStack threadStack = new ThreadStack();
@@ -555,9 +562,21 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
return obj;
}
+ private void ToggleSelectedFrameBookmark(Location location)
+ {
+ // remove all
+ BookmarkManager.RemoveAll(b => b is SelectedFrameBookmark);
+
+ ITextEditorProvider provider = WorkbenchSingleton.Workbench.ActiveContent as ITextEditorProvider;
+ if (provider != null) {
+ ITextEditor editor = provider.TextEditor;
+ BookmarkManager.AddMark(new SelectedFrameBookmark(editor.FileName, location));
+ }
+ }
+
private void OnThreadStackSelected(object sender, EventArgs e)
{
- foreach (var ts in this.currentThreadStacks) {
+ foreach (var ts in this.currentThreadStacks.FindAll(ts => ts.ThreadStackChildren == null)) {
if (ts.IsSelected)
ts.IsSelected = false;
ts.ClearImages();
@@ -568,6 +587,8 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
{
selectedFrame = e.Item;
+ ToggleSelectedFrameBookmark(e.Location);
+
if (isMethodView)
RefreshPad();
}
diff --git a/src/AddIns/Debugger/Debugger.AddIn/Pads/ParallelPad/ThreadStack.xaml.cs b/src/AddIns/Debugger/Debugger.AddIn/Pads/ParallelPad/ThreadStack.xaml.cs
index 04f7f16bad..fb2899ae52 100644
--- a/src/AddIns/Debugger/Debugger.AddIn/Pads/ParallelPad/ThreadStack.xaml.cs
+++ b/src/AddIns/Debugger/Debugger.AddIn/Pads/ParallelPad/ThreadStack.xaml.cs
@@ -11,6 +11,7 @@ using System.Windows.Input;
using System.Windows.Media;
using ICSharpCode.Core.Presentation;
+using ICSharpCode.NRefactory;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Gui.Pads;
@@ -23,9 +24,15 @@ namespace Debugger.AddIn.Pads.ParallelPad
private set;
}
- public FrameSelectedEventArgs(StackFrame item)
+ public Location Location {
+ get;
+ private set;
+ }
+
+ public FrameSelectedEventArgs(StackFrame item, Location location)
{
Item = item;
+ Location = location;
}
}
@@ -198,13 +205,14 @@ namespace Debugger.AddIn.Pads.ParallelPad
SourcecodeSegment nextStatement = frame.NextStatement;
if (nextStatement != null) {
+ var location = new Location(nextStatement.StartColumn, nextStatement.StartLine);
FileService.JumpToFilePosition(
- nextStatement.Filename, nextStatement.StartLine, nextStatement.StartColumn);
+ nextStatement.Filename, location.Line, location.Column);
+
+ if (FrameSelected != null)
+ FrameSelected(this, new FrameSelectedEventArgs(frame, location));
}
- if (FrameSelected != null)
- FrameSelected(this, new FrameSelectedEventArgs(frame));
-
break;
}
}