void AddBreakpoint (Breakpoint bp) { if (DebuggingService.PinnedWatches.IsWatcherBreakpoint (bp)) return; var textEditor = widget.TextEditor; if (textEditor == null) return; var document = textEditor.Document; if (document == null) return; FilePath fp = Name; if (fp.FullPath == bp.FileName) { if (bp.Line <= 0 || bp.Line > textEditor.Document.LineCount) { LoggingService.LogWarning ("Invalid breakpoint :" + bp + " in line " + bp.Line); return; } DocumentLine line = document.GetLine (bp.Line); var status = bp.GetStatus (DebuggingService.DebuggerSession); bool tracepoint = (bp.HitAction & HitAction.Break) == HitAction.None; if (line == null) return; //TODO: 1. When not in debug mode use Microsoft.CodeAnalysis.CSharp.EditAndContinue.BreakpointSpans.TryGetBreakpointSpan //TODO: 2. When in debug mode extend Breakpoint class to have endLine and endColumn set if .mdb/.pdb has endLine/endColumn var offset = line.Offset; var lenght = line.Length; DebugMarkerPair marker; if (!bp.Enabled) { marker = new DisabledBreakpointTextMarker (textEditor, offset, lenght, tracepoint); } else if (status == BreakEventStatus.Bound || status == BreakEventStatus.Disconnected) { marker = new BreakpointTextMarker (textEditor, offset, lenght, tracepoint); } else { marker = new InvalidBreakpointTextMarker (textEditor, offset, lenght, tracepoint); } textEditor.QueueDraw (); breakpointSegments.Add (marker); marker.AddTo (document, line); } }
void AddBreakpoint (Breakpoint bp) { if (DebuggingService.PinnedWatches.IsWatcherBreakpoint (bp)) return; FilePath fp = Name; if (fp.FullPath == bp.FileName) { DocumentLine line = widget.TextEditor.Document.GetLine (bp.Line); var status = bp.GetStatus (DebuggingService.DebuggerSession); if (line == null) return; if (!bp.Enabled) { if (bp.HitAction == HitAction.Break) widget.TextEditor.Document.AddMarker (line, new DisabledBreakpointTextMarker (widget.TextEditor, false)); else widget.TextEditor.Document.AddMarker (line, new DisabledBreakpointTextMarker (widget.TextEditor, true)); } else if (status == BreakEventStatus.Bound || status == BreakEventStatus.Disconnected) { if (bp.HitAction == HitAction.Break) widget.TextEditor.Document.AddMarker (line, new BreakpointTextMarker (widget.TextEditor, false)); else widget.TextEditor.Document.AddMarker (line, new BreakpointTextMarker (widget.TextEditor, true)); } else widget.TextEditor.Document.AddMarker (line, new InvalidBreakpointTextMarker (widget.TextEditor)); widget.TextEditor.QueueDraw (); breakpointSegments.Add (line); } }
void AddBreakpoint (Breakpoint bp) { if (DebuggingService.PinnedWatches.IsWatcherBreakpoint (bp)) return; var textEditor = widget.TextEditor; if (textEditor == null) return; var document = textEditor.Document; if (document == null) return; FilePath fp = Name; if (fp.FullPath == bp.FileName) { if (bp.Line <= 0 || bp.Line > textEditor.Document.LineCount) { LoggingService.LogWarning ("Invalid breakpoint :" + bp +" in line " + bp.Line); return; } DocumentLine line = document.GetLine (bp.Line); var status = bp.GetStatus (DebuggingService.DebuggerSession); bool tracepoint = (bp.HitAction & HitAction.Break) == HitAction.None; if (line == null) return; if (!bp.Enabled) { document.AddMarker (line, new DisabledBreakpointTextMarker (textEditor, tracepoint)); } else if (status == BreakEventStatus.Bound || status == BreakEventStatus.Disconnected) { document.AddMarker (line, new BreakpointTextMarker (textEditor, tracepoint)); } else { document.AddMarker (line, new InvalidBreakpointTextMarker (textEditor, tracepoint)); } textEditor.QueueDraw (); breakpointSegments.Add (line); } }