Exemplo n.º 1
0
        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();
                        }
                    }
                }
            }
        }
Exemplo n.º 2
0
        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();
        }
Exemplo n.º 3
0
        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();
        }
Exemplo n.º 4
0
        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();
                        }
                    }
        }