Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
        /// <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);
        }