///////////////////////////////////////////////////////////////////////////////////// private void setControlStatement(BasicBlock current, BreakCmd breakCmd, BasicBlock next) { Debug.Assert(breakCmd.BreakEnclosure != null); string breakTargetLabel = null; if (breakCmd.BreakEnclosure.successorBigBlock != null) { breakTargetLabel = breakCmd.BreakEnclosure.successorBigBlock.LabelName; } else { breakTargetLabel = "$exit"; } current.setControlStatement(new UnconditionalBranch(current, cfg.lookupOrAddNode(breakTargetLabel))); }
public override void SetBreakpoints(Response response, dynamic args) { string path = null; if (args.source != null) { string p = (string)args.source.path; if (p != null && p.Trim().Length > 0) { path = p; } } if (path == null) { SendErrorResponse(response, 3010, "setBreakpoints: property 'source' is empty or misformed", null, false, true); return; } path = ConvertClientPathToDebugger(path); int[] clientLines = args.lines.ToObject <int[]>(); var file = path.Replace(_t_work_dir, "").Trim('/', '\\'); BreakCmd cmd = new BreakCmd(); cmd.m_file = file; cmd.m_cmd_mode = BreakCmd.BreakCmdMode.ResetOneFile; var breakpoints = new List <Breakpoint>(); for (var i = 0; i < clientLines.Length; ++i) { var l = ConvertClientLineToDebugger(clientLines[i]); var p = new BreakPoint(); p.file_name = file; p.line = l; cmd.m_break_points.Add(p); breakpoints.Add(new Breakpoint(true, clientLines[i])); } SendOneCmdAndWaitForResponse(cmd); SendResponse(response, new SetBreakpointsResponseBody(breakpoints)); }
DebugCmd ParseCmd(string line) { string[] args = System.Text.RegularExpressions.Regex.Split(line, @"\s+"); if (args.Length == 0) { return(null); } if (args[0] == "b" && args.Length == 3) { BreakCmd cmd = new BreakCmd(); BreakPoint point = new BreakPoint(); point.file_name = args[1]; point.line = Convert.ToInt32(args[2]); cmd.m_cmd_mode = BreakCmd.BreakCmdMode.Set; cmd.m_break_points.Add(point); return(cmd); } else if (args[0] == "br" && args.Length >= 2) { BreakCmd cmd = new BreakCmd(); if (args[1] == "list") { cmd.m_cmd_mode = BreakCmd.BreakCmdMode.List; return(cmd); } else if (args[1] == "clear") { cmd.m_cmd_mode = BreakCmd.BreakCmdMode.DeleteAll; return(cmd); } else if (args[1] == "delete" && args.Length >= 3) { cmd.m_cmd_mode = BreakCmd.BreakCmdMode.Delete; for (int i = 2; i < args.Length; ++i) { BreakPoint point = new BreakPoint(); point.index = Convert.ToInt32(args[i]); cmd.m_break_points.Add(point); } return(cmd); } } else if (args[0] == "c") { Continue cmd = new Continue(); return(cmd); } else if (args[0] == "n") { StepOver cmd = new StepOver(); return(cmd); } else if (args[0] == "s") { StepIn cmd = new StepIn(); return(cmd); } else if (args[0] == "f") { StepOut cmd = new StepOut(); return(cmd); } else if (args[0] == "bt") { BackTraceCmd cmd = new BackTraceCmd(); return(cmd); } else if (args[0] == "p" && args.Length == 2) { PrintCmd cmd = new PrintCmd(); cmd.m_name = args[1]; return(cmd); } else if (args[0] == "t") { Terminate cmd = new Terminate(); return(cmd); } else if (args[0] == "h") { Console.Write(_help_info); } else { Console.WriteLine("what do you want? type 'h' for help"); } return(null); }