/// <summary> /// <para>Return a debug.traceback() call result (a multi-line string, containing a full stack trace, including C calls.</para> /// <para>Note: it won't return anything unless the interpreter is in the middle of execution - that is, it only makes sense to call it from a method called from Lua, or during a coroutine yield.</para> /// </summary> public string GetDebugTraceback() { int oldTop = LuaLib.LuaGetTop(luaState); LuaLib.LuaGetGlobal(luaState, "debug"); // stack: debug LuaLib.LuaGetField(luaState, -1, "traceback"); // stack: debug,traceback LuaLib.LuaRemove(luaState, -2); // stack: traceback LuaLib.LuaPCall(luaState, 0, -1, 0); return(translator.PopValues(luaState, oldTop)[0] as string); }
/// <summary> /// Push a debug.traceback reference onto the stack, for a pcall function to use as error handler. (Remember to increment any top-of-stack markers!) /// </summary> private int PushDebugTraceback(LuaState luaState, int argcount) { LuaLib.LuaGetGlobal(luaState, "debug"); LuaLib.LuaGetField(luaState, -1, "traceback"); LuaLib.LuaRemove(luaState, -2); int errindex = -argcount - 2; LuaLib.LuaInsert(luaState, errindex); return(errindex); }