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); }
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); }