Пример #1
0
        public static Jint.Engine GetDebugJsEngine(RenderContext context, ScriptDebugger.DebugSession session)
        {
            session.CurrentContext = context;
            var item = context.GetItem <Jint.Engine>(DebuggerEngineName);

            if (item == null)
            {
                item = new Jint.Engine(JintSetting.SetDebugOption);

                item.Break += (s, e) => EngineStepOrBreak(s, e, session);
                item.Step  += (s, e) => EngineStepOrBreak(s, e, session);

                var kcontext = context.GetItem <k>();
                if (kcontext == null)
                {
                    kcontext = new k(context);
                    context.SetItem <k>(kcontext);
                }

                item.SetValue("k", kcontext);

                context.SetItem <Jint.Engine>(item, DebuggerEngineName);
            }

            return(item);
        }
Пример #2
0
        private static Jint.Runtime.Debugger.StepMode Engine_Break(object sender, Jint.Runtime.Debugger.DebugInformation e, ScriptDebugger.DebugSession session)
        {
            if (session.EndOfSession)
            {
                return(Jint.Runtime.Debugger.StepMode.None);
            }
            var info = new ScriptDebugger.DebugInfo
            {
                Start = e.CurrentStatement.Location.Start,
                End   = e.CurrentStatement.Location.End,

                Variables = Kooboo.Sites.Scripting.Manager.GetVariables(sender as Jint.Engine)
            };

            session.DebugInfo = info;

            int count = 1;

            while (session.Action == null)
            {
                System.Threading.Thread.Sleep(100);
                count += 1;
                if (count > 10000)
                {
                    break;
                }

                if (session.EndOfSession)
                {
                    return(Jint.Runtime.Debugger.StepMode.None);
                }
            }

            if (session.EndOfSession)
            {
                return(Jint.Runtime.Debugger.StepMode.None);
            }

            if (session.Action != null)
            {
                var mode = session.Action.StepMode;
                session.Action = null;
                return(mode);
            }

            return(Jint.Runtime.Debugger.StepMode.None);
        }