Beispiel #1
0
        private void pLuaVM_DebugHook(object sender, DebugHookEventArgs e)
        {
            //callback
            if (baseCallback != null)
            {
                baseCallback.Invoke(baseClass, new object[0]);
            }

            if (AsyncThread != null)
            {
                mayAsyncContinue = false;
                isProcessing = false;
                while (!mayAsyncContinue && AsyncThread != null) System.Threading.Thread.Sleep(1);
                isProcessing = true;
            }
        }
        /// <summary>
        /// Lua debug hook event handler.
        /// </summary>
        /// <param name="sender">Sender of the event</param>
        /// <param name="e">Event args</param>
        /// <remarks>
        /// This is the main debug handler.
        /// This event calls the FullTraceData event (if enabled),
        /// Stoping event and the WaitingForAction event (when execution is stoped).
        /// </remarks>
        private void Lua_DebugHook(object sender, DebugHookEventArgs e)
        {
            if (!m_InDebugHook)
             {
            m_InDebugHook = true;
            try
            {
               if (m_FullTrace)
               {
                  OnFullTraceData(e);
               }

               if (m_State != LuaDebuggerState.Disabled)
               {
                  if (e.LuaDebug.eventCode == EventCodes.LUA_HOOKCALL)
                  {
                     ++m_StackLevel;
                  }
                  else if (e.LuaDebug.eventCode == EventCodes.LUA_HOOKRET
                     || e.LuaDebug.eventCode == EventCodes.LUA_HOOKTAILRET)
                  {
                     --m_StackLevel;
                  }

                  if (e.LuaDebug.eventCode == EventCodes.LUA_HOOKCALL || e.LuaDebug.eventCode == EventCodes.LUA_HOOKLINE)
                  {
                     LuaDebug luaDebug = e.LuaDebug;
                     m_Lua.GetInfo("nS", ref luaDebug);
                     int line = luaDebug.eventCode == EventCodes.LUA_HOOKCALL ? luaDebug.linedefined : luaDebug.currentline;
                     if (luaDebug.source.Length > 0 && luaDebug.source[0] == '@')
                     {
                        LuaDebugBreakpoint breakpoint;
                        switch (m_Action)
                        {
                           case DebuggerActions.Run:
                              // checked for breakpoints
                              breakpoint = GetBreakpoint(luaDebug.shortsrc, line);
                              if (breakpoint != null && breakpoint.Enabled)
                              {
                                 StopExecution(luaDebug, m_Action, breakpoint);
                              }
                              break;

                           case DebuggerActions.Stop:
                           case DebuggerActions.StepInto:
                              StopExecution(luaDebug, m_Action, null);
                              break;

                           case DebuggerActions.StepOver:
                           case DebuggerActions.StepOut:
                              // checked for breakpoints or if stack level is ready for stopping
                              if (m_StackLevel <= m_StepStackLevel)
                              {
                                 StopExecution(luaDebug, m_Action, null);
                              }
                              else
                              {
                                 breakpoint = GetBreakpoint(luaDebug.shortsrc, line);
                                 if (breakpoint != null && breakpoint.Enabled)
                                 {
                                    StopExecution(luaDebug, m_Action, breakpoint);
                                 }
                              }
                              break;

                           default:
                              break;
                        }
                     }
                  }
               }
            }
            finally
            {
               m_InDebugHook = false;
            }
             }
        }
 private void OnFullTraceData(DebugHookEventArgs e)
 {
     EventHandler<DebugHookEventArgs> temp = FullTraceData;
      if (temp != null)
      {
     temp(this, e);
      }
 }
        void Debugger_FullTraceData(object sender, DebugHookEventArgs e)
        {
            Console.Out.Write(String.Format("FT {0} ", e.LuaDebug.eventCode.ToString()));
             Console.Out.WriteLine(e.LuaDebug.currentline);

             LuaDebug luaDebug = e.LuaDebug;
             if (m_Lua.GetInfo("nS", ref luaDebug) == 0)
             {
            Console.Out.WriteLine("   Lua.GetInfo failed!");
             }
             else
             {
            if (luaDebug.source.Length > 0 && luaDebug.source[0] == '@')
            {
               Console.Out.WriteLine(String.Format("   n:{0} nw:{1} w:{2} s:{3} ss:{4} ld:{5} lld:{6} cl:{7}",
                  luaDebug.name, luaDebug.namewhat,
                  luaDebug.what, luaDebug.source, luaDebug.shortsrc,
                  luaDebug.linedefined, luaDebug.lastlinedefined, luaDebug.currentline));
            }
             }
        }