Browse Source

Implemented SD2-546: Breakpoints that will not be hit should have different icon;

Reworked breakpoint synchronization.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@1085 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
David Srbecký 20 years ago
parent
commit
bcae75a925
  1. 65
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Service/WindowsDebugger.cs
  2. 10
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Breakpoints/Breakpoint.cs
  3. 2
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Breakpoints/NDebugger-Breakpoints.cs
  4. 18
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Threads/SourcecodeSegment.cs
  5. 20
      src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/BookmarkManager/Bookmark.cs
  6. 10
      src/Main/Base/Project/Src/Services/Debugger/BreakpointBookmark.cs
  7. 14
      src/Main/Base/Project/Src/TextEditor/Bookmarks/Bookmark.cs

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

@ -27,6 +27,7 @@ using System.Runtime.Remoting; @@ -27,6 +27,7 @@ using System.Runtime.Remoting;
using System.Reflection;
using System.Security.Policy;
using System.Diagnostics;
using BM = ICSharpCode.SharpDevelop.Bookmarks;
namespace ICSharpCode.SharpDevelop.Services
{
@ -288,21 +289,13 @@ namespace ICSharpCode.SharpDevelop.Services @@ -288,21 +289,13 @@ namespace ICSharpCode.SharpDevelop.Services
debugger.DebuggeeStateChanged += DebuggeeStateChanged;
debugger.DebuggingResumed += DebuggingResumed;
debugger.BreakpointStateChanged += delegate (object sender, BreakpointEventArgs e) {
RestoreSharpdevelopBreakpoint(e.Breakpoint);
};
DebuggerService.BreakPointAdded += delegate (object sender, BreakpointBookmarkEventArgs e) {
AddBreakpoint(e.BreakpointBookmark);
};
DebuggerService.BreakPointRemoved += delegate (object sender, BreakpointBookmarkEventArgs e) {
RemoveBreakpoint(e.BreakpointBookmark);
};
DebuggerService.BreakPointChanged += delegate (object sender, BreakpointBookmarkEventArgs e) {
RemoveBreakpoint(e.BreakpointBookmark);
DebuggerService.BreakPointAdded += delegate (object sender, BreakpointBookmarkEventArgs e) {
AddBreakpoint(e.BreakpointBookmark);
};
RestoreNDebuggerBreakpoints();
foreach (BreakpointBookmark b in DebuggerService.Breakpoints) {
AddBreakpoint(b);
}
isDebuggingCache = false;
isProcessRunningCache = true;
@ -314,38 +307,26 @@ namespace ICSharpCode.SharpDevelop.Services @@ -314,38 +307,26 @@ namespace ICSharpCode.SharpDevelop.Services
serviceInitialized = true;
}
void AddBreakpoint(BreakpointBookmark breakpointBookmark)
void AddBreakpoint(BreakpointBookmark bookmark)
{
SourcecodeSegment seg = new SourcecodeSegment(breakpointBookmark.FileName, breakpointBookmark.LineNumber + 1);
Breakpoint b = debugger.AddBreakpoint(seg, breakpointBookmark.IsEnabled);
breakpointBookmark.Tag = b;
}
void RemoveBreakpoint(BreakpointBookmark breakpointBookmark)
{
Breakpoint b = breakpointBookmark.Tag as Breakpoint;
if (b != null) {
debugger.RemoveBreakpoint(b);
}
}
void RestoreNDebuggerBreakpoints()
{
debugger.ClearBreakpoints();
foreach (BreakpointBookmark b in DebuggerService.Breakpoints) {
AddBreakpoint(b);
}
}
void RestoreSharpdevelopBreakpoint(Breakpoint breakpoint)
{
foreach (BreakpointBookmark sdBreakpoint in DebuggerService.Breakpoints) {
if (sdBreakpoint.Tag == breakpoint) {
sdBreakpoint.IsEnabled = breakpoint.Enabled;
sdBreakpoint.FileName = breakpoint.SourcecodeSegment.SourceFullFilename;
sdBreakpoint.LineNumber = breakpoint.SourcecodeSegment.StartLine - 1;
SourcecodeSegment seg = new SourcecodeSegment(bookmark.FileName, bookmark.LineNumber + 1);
Breakpoint breakpoint = debugger.AddBreakpoint(seg, bookmark.IsEnabled);
MethodInvoker setBookmarkColor = delegate {
bookmark.WillBeHit = breakpoint.HadBeenSet || debugger.Processes.Count == 0;
};
breakpoint.Changed += delegate { setBookmarkColor(); };
debugger.ProcessStarted += delegate { setBookmarkColor(); };
debugger.ProcessExited += delegate { setBookmarkColor(); };
setBookmarkColor();
BM.BookmarkManager.Removed += delegate (object sender, BM.BookmarkEventArgs e) {
if (bookmark == e.Bookmark) {
debugger.RemoveBreakpoint(breakpoint);
}
}
};
bookmark.IsEnabledChanged += delegate {
breakpoint.Enabled = bookmark.IsEnabled;
};
}
void LogMessage(object sender, MessageEventArgs e)

10
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Breakpoints/Breakpoint.cs

@ -49,9 +49,6 @@ namespace Debugger @@ -49,9 +49,6 @@ namespace Debugger
public bool Enabled {
get {
if (HadBeenSet) {
enabled = (corBreakpoint.IsActive == 1);
}
return enabled;
}
set {
@ -109,13 +106,12 @@ namespace Debugger @@ -109,13 +106,12 @@ namespace Debugger
return base.GetHashCode();
}
internal unsafe void ResetBreakpoint()
internal void MarkUnset()
{
HadBeenSet = false;
}
internal unsafe bool SetBreakpoint()
public bool SetBreakpoint()
{
if (hadBeenSet) {
return true;
@ -123,7 +119,7 @@ namespace Debugger @@ -123,7 +119,7 @@ namespace Debugger
ICorDebugFunction corFunction;
int ilOffset;
if (!sourcecodeSegment.GetFunctionAndOffset(debugger, true, out corFunction, out ilOffset)) {
if (!sourcecodeSegment.GetFunctionAndOffset(debugger, false, out corFunction, out ilOffset)) {
return false;
}

2
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Breakpoints/NDebugger-Breakpoints.cs

@ -104,7 +104,7 @@ namespace Debugger @@ -104,7 +104,7 @@ namespace Debugger
public void ResetBreakpoints()
{
foreach (Breakpoint b in breakpointCollection) {
b.ResetBreakpoint();
b.MarkUnset();
}
}

18
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Threads/SourcecodeSegment.cs

@ -198,23 +198,19 @@ namespace Debugger @@ -198,23 +198,19 @@ namespace Debugger
} catch {
return false; //Not found
}
if (validLine != StartLine) {
if (normailize) {
StartLine = validLine;
EndLine = validLine;
StartColumn = 0;
EndColumn = 0;
} else {
return false;
}
if (validLine != StartLine && normailize) {
StartLine = validLine;
EndLine = validLine;
StartColumn = 0;
EndColumn = 0;
}
ISymbolMethod symMethod;
symMethod = symReader.GetMethodFromDocumentPosition(symDoc, StartLine, StartColumn);
symMethod = symReader.GetMethodFromDocumentPosition(symDoc, validLine, StartColumn);
function = module.CorModule.GetFunctionFromToken((uint)symMethod.Token.GetToken());
ilOffset = symMethod.GetOffset(symDoc, StartLine, StartColumn);
ilOffset = symMethod.GetOffset(symDoc, validLine, StartColumn);
return true;
}

20
src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/BookmarkManager/Bookmark.cs

@ -46,14 +46,26 @@ namespace ICSharpCode.TextEditor.Document @@ -46,14 +46,26 @@ namespace ICSharpCode.TextEditor.Document
return isEnabled;
}
set {
isEnabled = value;
if (document != null) {
document.RequestUpdate(new TextAreaUpdate(TextAreaUpdateType.SingleLine, lineNumber));
document.CommitUpdate();
if (isEnabled != value) {
isEnabled = value;
if (document != null) {
document.RequestUpdate(new TextAreaUpdate(TextAreaUpdateType.SingleLine, lineNumber));
document.CommitUpdate();
}
OnIsEnabledChanged(EventArgs.Empty);
}
}
}
public event EventHandler IsEnabledChanged;
protected virtual void OnIsEnabledChanged(EventArgs e)
{
if (IsEnabledChanged != null) {
IsEnabledChanged(this, e);
}
}
public int LineNumber {
get {
return lineNumber;

10
src/Main/Base/Project/Src/Services/Debugger/BreakpointBookmark.cs

@ -21,7 +21,6 @@ namespace ICSharpCode.Core @@ -21,7 +21,6 @@ namespace ICSharpCode.Core
public class BreakpointBookmark: SDMarkerBookmark
{
bool willBeHit = true;
object tag;
public virtual bool WillBeHit {
get {
@ -36,15 +35,6 @@ namespace ICSharpCode.Core @@ -36,15 +35,6 @@ namespace ICSharpCode.Core
}
}
public object Tag {
get {
return tag;
}
set {
tag = value;
}
}
public BreakpointBookmark(string fileName, IDocument document, int lineNumber) : base(fileName, document, lineNumber)
{
}

14
src/Main/Base/Project/Src/TextEditor/Bookmarks/Bookmark.cs

@ -35,7 +35,19 @@ namespace ICSharpCode.SharpDevelop.Bookmarks @@ -35,7 +35,19 @@ namespace ICSharpCode.SharpDevelop.Bookmarks
return fileName;
}
set {
fileName = value;
if (fileName != value) {
fileName = value;
OnFileNameChanged(EventArgs.Empty);
}
}
}
public event EventHandler FileNameChanged;
protected virtual void OnFileNameChanged(EventArgs e)
{
if (FileNameChanged != null) {
FileNameChanged(this, e);
}
}

Loading…
Cancel
Save