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