private void btnRun_Click(object sender, EventArgs e) { //入参判断是否json //var thread = new Thread(() => ThreadProc(this.txtCode.Text, BreakPoints)); //CurrentDebugStatus = 0; //thread.Start(); if (db.IsRunning) { //db.StepOut(); } else { //将document中的breakpoint转成breakPointList IList <EditorBreakPoint> BreakPoints = new List <EditorBreakPoint>(); foreach (var item in this.txtCode.Document.BookmarkManager.Marks) { if (item.GetType().Name == "BreakPointMark") { BreakPointMark breakPointMark = (BreakPointMark)item; BreakPoints.Add(new EditorBreakPoint(breakPointMark.Location.Line + 1, breakPointMark.Location.Column)); } } var instance = new JintDebugInstance() { Script = this.txtCode.Text, BreakPoints = BreakPoints, InputJson = this.txtInput.Text.Trim() }; db.Run(instance); } }
/// <summary> /// 运行 /// </summary> /// <param name="Script"></param> /// <param name="BreakPoints"></param> public void Run(JintDebugInstance instance) { if (IsRunning == false) { thread = new Thread(() => ThreadProc(instance)); thread.Start(); if (this.OnBegin != null) { this.OnBegin.Invoke(this); } } }
/// <summary> /// 启动调试进程 /// </summary> /// <param name="script"></param> /// <param name="breakPoints"></param> private void ThreadProc(JintDebugInstance instance) { IsRunning = true; try { //_breakType = BreakType.Break; _breakType = BreakType.Break; BreakOnNextStatement = true; _breakType = BreakType.Step; BreakOnNextStatement = false; engine = new Engine(cfg => cfg.AllowClr(typeof(DataSet).Assembly).CatchClrExceptions().DebugMode()); if (instance.InputJson != "") { engine.SetValue("strjson", instance.InputJson); engine.Execute("var model=JSON.parse(strjson);"); } //增加一个excel帮助类 //var excel = new JIntExcelHelepr(); //engine.SetValue("excel", excel); foreach (var bp in instance.BreakPoints) { engine.BreakPoints.Add(new BreakPoint(bp.Line, bp.Column)); } var func = engine.Execute(instance.Script).GetValue("exec"); engine.Break += Engine_Break; engine.Step += Engine_Step; var result = func.Invoke().ToObject(); if (this.OnEnd != null) { this.OnEnd.Invoke(this, result); } } catch (JavaScriptException ex) { if (this.OnError != null) { this.OnError.Invoke(this, ex); } } finally { engine = null; IsRunning = false; } }