1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
| void luaStackTrace(lua_State *L) { int i; int top = lua_gettop(L); printf("---- Begin Stack ----\n"); printf("Stack size: %i\n\n", top); for (i = top; i >= 1; i--) { int t = lua_type(L, i); switch (t) { case LUA_TSTRING: printf("%i -- (%i) ----string: `%s'", i, i - (top + 1), lua_tostring(L, i)); break;
case LUA_TBOOLEAN: printf("%i -- (%i) ----bool: %s", i, i - (top + 1), lua_toboolean(L, i) ? "true" : "false"); break;
case LUA_TNUMBER: printf("%i -- (%i) ----number: %g", i, i - (top + 1), lua_tonumber(L, i)); break;
case LUA_TTABLE: { printf("%i -- (%i) ---- %s\n", i, i - (top + 1), lua_typename(L, t)); lua_pushnil(L); while (lua_next(L, i) != 0) { switch (lua_type(L, -2)) { case LUA_TSTRING: printf("| key ----string: `%s'", lua_tostring(L, -2)); break;
case LUA_TBOOLEAN: printf("| key ----bool: %s", lua_toboolean(L, -2) ? "true" : "false"); break;
case LUA_TNUMBER: printf("| key ----number: %g", lua_tonumber(L, -2)); break; default: printf("| key ---- %s", lua_typename(L, -2)); break; } printf("\n"); switch (lua_type(L, -1)) { case LUA_TSTRING: printf("| value ----string: `%s'", lua_tostring(L, -1)); break;
case LUA_TBOOLEAN: printf("| value ----bool: %s", lua_toboolean(L, -1) ? "true" : "false"); break;
case LUA_TNUMBER: printf("| value ----number: %g", lua_tonumber(L, -1)); break; default: printf("| value ---- %s", lua_typename(L, -1)); break; }
printf("\n"); lua_pop(L, 1); } printf("%i -- (%i) table end", i, i - (top + 1)); break; } default: printf("%i -- (%i) ---- %s", i, i - (top + 1), lua_typename(L, t)); break; } printf("\n"); } printf("---- End Stack ----\n"); printf("\n"); }
|