我目前正在将游戏(Bitfighter)从 Lua 5.1 迁移到 LuaJIT 2.0.2。我已经得到了适当的编译和链接;但是,当运行游戏并实际尝试运行 lua 脚本(用于机器人)时,我似乎得到了一个损坏的堆栈。
尝试为脚本设置环境时会出现问题 - 我在制作副本之前获取全局环境:
lua_pushvalue(L, LUA_GLOBALSINDEX); // -- globalEnv
但是,当在这里转储堆栈时,堆栈有 1 项是 a LUA_TSTRING
,其值为NULL
(堆栈事先为空)。这在链接到普通 Lua 5.1 库时没有问题,并且上述调用正确地将全局表推入堆栈。
我读到这可能意味着堆栈在其他地方已损坏,并且 LuaJIT 不如普通 VM 宽容。我打开了 LuaJIT-DLUA_USE_ASSERT
的-DLUA_USE_APICHECK
编译器标志,但没有被触发。
在设置脚本环境之前,我们lua_pcall
使用 C API 将几个脚本加载到全局环境中,并设置几个其他全局变量。这些会导致像这样的未知堆栈损坏吗?
如何找到堆栈损坏?或者,我是否遗漏了 LuaJIT 的其他重要内容?