void LoadSourceFileIntoEditor(string file, sstSrcModule.SourceFileInformation?f = null) { // Assume all files not be modified since the last time of load. Better performance. if (file == lastOpenedFile) { return; } if (!File.Exists(file)) { MessageBox.Show(file + " cannot be found!"); return; } if (!f.HasValue) { f = GetFileInfo(dbg.MainProcess.MainModule, file); } MarkerStrategy.RemoveAll(); currentFrameMarker = null; editor.Load(lastOpenedFile = file); editor.IsReadOnly = true; // Highlight all lines where breakpoints can be set var lines = new List <int>(); if (f.HasValue) { foreach (var seg in f.Value.Segments) { for (int i = 0; i < seg.Lines.Length; i++) { var ln = seg.Lines[i]; var marker = new DebugInfoAvailableMarker(MarkerStrategy, editor.Document, ln, ln); MarkerStrategy.Add(marker); marker.Redraw(); marker.Tag = seg.Offsets[i]; // And highlight previously set breakpoints var bp = dbg.Breakpoints.ByAddress(dbg.MainProcess.MainModule.ToVirtualAddress((int)seg.Offsets[i])); if (bp != null) { var bpM = new BreakpointMarker(MarkerStrategy, bp, editor.Document, ln, ln); MarkerStrategy.Add(bpM); bpM.Redraw(); } } } } }
private void toggleBreakpointClick(object sender, EventArgs e) { var markers = MarkerStrategy.GetMarkersAtOffset(editor.CaretOffset); var m = markers.FirstOrDefault(); if (m == null) { MessageBox.Show("Breakpoints can only be set at green highlighted lines"); return; } var modMetaInfo = dbg.MainProcess.MainModule.ModuleMetaInfo; var addr = new IntPtr(modMetaInfo.PEHeader.OptionalHeader32.ImageBase + modMetaInfo.PEHeader.OptionalHeader32.BaseOfCode + (uint)m.Tag); var bp = dbg.Breakpoints.ByAddress(addr); if (bp == null) { bp = dbg.Breakpoints.CreateBreakpoint(addr); } else { foreach (var _m in markers.ToArray()) { if (_m is BreakpointMarker) { _m.Delete(); } } dbg.Breakpoints.Remove(bp); return; } var line = editor.Document.GetLineByOffset(m.StartOffset).LineNumber; var newMrker = new BreakpointMarker(MarkerStrategy, bp, editor.Document, line, line); MarkerStrategy.Add(newMrker); newMrker.Redraw(); }
private void toggleBreakpointClick(object sender, EventArgs e) { var markers = MarkerStrategy.GetMarkersAtOffset(editor.CaretOffset); var m = markers.FirstOrDefault(); if (m == null) { MessageBox.Show("Breakpoints can only be set at green highlighted lines"); return; } var modMetaInfo = dbg.MainProcess.MainModule.ModuleMetaInfo; var addr = new IntPtr(modMetaInfo.PEHeader.OptionalHeader32.ImageBase + modMetaInfo.PEHeader.OptionalHeader32.BaseOfCode + (uint)m.Tag); var bp = dbg.Breakpoints.ByAddress(addr); if (bp == null) bp = dbg.Breakpoints.CreateBreakpoint(addr); else { foreach (var _m in markers.ToArray()) if(_m is BreakpointMarker) _m.Delete(); dbg.Breakpoints.Remove(bp); return; } var line = editor.Document.GetLineByOffset(m.StartOffset).LineNumber; var newMrker = new BreakpointMarker(MarkerStrategy, bp, editor.Document, line, line); MarkerStrategy.Add(newMrker); newMrker.Redraw(); }
void LoadSourceFileIntoEditor(string file, sstSrcModule.SourceFileInformation? f = null) { // Assume all files not be modified since the last time of load. Better performance. if (file == lastOpenedFile) return; if (!File.Exists(file)) { MessageBox.Show(file + " cannot be found!"); return; } if (!f.HasValue) f = GetFileInfo(dbg.MainProcess.MainModule, file); MarkerStrategy.RemoveAll(); currentFrameMarker = null; editor.Load(lastOpenedFile = file); editor.IsReadOnly = true; // Highlight all lines where breakpoints can be set var lines = new List<int>(); if(f.HasValue) foreach (var seg in f.Value.Segments) for (int i = 0; i < seg.Lines.Length; i++) { var ln = seg.Lines[i]; var marker = new DebugInfoAvailableMarker(MarkerStrategy, editor.Document, ln, ln); MarkerStrategy.Add(marker); marker.Redraw(); marker.Tag = seg.Offsets[i]; // And highlight previously set breakpoints var bp = dbg.Breakpoints.ByAddress(dbg.MainProcess.MainModule.ToVirtualAddress((int)seg.Offsets[i])); if (bp != null) { var bpM = new BreakpointMarker(MarkerStrategy, bp, editor.Document, ln, ln); MarkerStrategy.Add(bpM); bpM.Redraw(); } } }