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

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

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

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

@ -104,7 +104,7 @@ namespace Debugger
public void ResetBreakpoints() public void ResetBreakpoints()
{ {
foreach (Breakpoint b in breakpointCollection) { 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
} catch { } catch {
return false; //Not found return false; //Not found
} }
if (validLine != StartLine) { if (validLine != StartLine && normailize) {
if (normailize) { StartLine = validLine;
StartLine = validLine; EndLine = validLine;
EndLine = validLine; StartColumn = 0;
StartColumn = 0; EndColumn = 0;
EndColumn = 0;
} else {
return false;
}
} }
ISymbolMethod symMethod; ISymbolMethod symMethod;
symMethod = symReader.GetMethodFromDocumentPosition(symDoc, StartLine, StartColumn); symMethod = symReader.GetMethodFromDocumentPosition(symDoc, validLine, StartColumn);
function = module.CorModule.GetFunctionFromToken((uint)symMethod.Token.GetToken()); function = module.CorModule.GetFunctionFromToken((uint)symMethod.Token.GetToken());
ilOffset = symMethod.GetOffset(symDoc, StartLine, StartColumn); ilOffset = symMethod.GetOffset(symDoc, validLine, StartColumn);
return true; return true;
} }

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

@ -46,14 +46,26 @@ namespace ICSharpCode.TextEditor.Document
return isEnabled; return isEnabled;
} }
set { set {
isEnabled = value; if (isEnabled != value) {
if (document != null) { isEnabled = value;
document.RequestUpdate(new TextAreaUpdate(TextAreaUpdateType.SingleLine, lineNumber)); if (document != null) {
document.CommitUpdate(); 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 { public int LineNumber {
get { get {
return lineNumber; return lineNumber;

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

@ -21,7 +21,6 @@ namespace ICSharpCode.Core
public class BreakpointBookmark: SDMarkerBookmark public class BreakpointBookmark: SDMarkerBookmark
{ {
bool willBeHit = true; bool willBeHit = true;
object tag;
public virtual bool WillBeHit { public virtual bool WillBeHit {
get { get {
@ -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) 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
return fileName; return fileName;
} }
set { 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