コード例 #1
0
ファイル: frmDebugger.cs プロジェクト: ringls/JintDebugger
        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);
            }
        }
コード例 #2
0
ファイル: Debugger.cs プロジェクト: ringls/JintDebugger
 /// <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);
         }
     }
 }
コード例 #3
0
ファイル: Debugger.cs プロジェクト: ringls/JintDebugger
        /// <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;
            }
        }