调试嵌入式 Lua 5.2.2 代码
Debugging embedded Lua 5.2.2 code
如何调试嵌入在C++应用程序中的Lua 5.2.2代码?
我已经看过这个问题,其中提供的所有 IDE 都处理 5.1 及更低版本,当我尝试将它们与 5.2.2 一起使用时,它们会崩溃。
您应该能够按照Lua 5.2调试说明使用ZeroBrane Studio调试应用程序。请注意,您需要针对 Lua5.2 编译 luasocket。(您看到的崩溃可能是因为您的应用程序加载了针对 Lua5.1 编译的 luasocket,而 luasocket 又加载了 Lua5.1 DLL 或无法找到所需的符号。
如果你不想编译luasocket,你可以从这个文件夹及其子文件夹中获取Windows/OSX/Linux的二进制文件;只要确保这些库在任何可能针对Lua5.1编译luasocket的文件夹之前LUA_CPATH。
[根据聊天讨论更新] 您可能遇到多个 VM 问题的原因是您的应用程序可能是静态编译 Lua 解释器。然后加载luasocket(直接或通过mobdebug),它是针对lua52.dll编译的,它加载解释器的另一个副本。为了避免这种情况,您有两种选择:(1) 将 luasocket 编译到您的应用程序中,就像您包含 lua 解释器本身一样;除了一个 MobTee.lua 文件之外,您不需要任何其他内容来调试您的应用程序,或者 (2) 使用代理 DLL;它看起来像 Lua52.dll,但实际上会将您的调用代理到静态编译的 Lua 库,从而避免多个 VM 出现问题。代理 dll 适用于 Lua 5.1,但您可以调整脚本以使其适用于 Lua 5.2。
(如果您的解释器不是静态编译的,如果您加载的 Lua DLL 的名称与 lua52.dll 不同,您仍然可以获得两个解释器。
为了响应OP的评论请求,以下是您应该如何从C++打开lua标准库"base":
#include "lua.hpp"
//...
int main ()
{
lua_State* L = luaL_newstate();
luaL_requiref(L, "base", luaopen_base, 0);
// ...
int error = luaL_loadfile(L, mainLua);
lua_call(L, 0, 0);
lua_close(L);
}
请注意,您可以通过替换以下内容一次打开所有标准库:
luaL_requiref(L, "base", luaopen_base, 0);
跟
luaL_openlibs(L);
Lua 5.2 参考手册第 6 节提供了有关此内容的更多信息。
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 代码在main()中运行,但在函数中出现错误
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 编译包含字符串的代码时遇到问题
- 我在c++代码中生成了一个运行时#3异常
- 如何在linux终端中同时编译和运行c++代码
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 在Linux for Windows上编译C++代码时出错
- LUA & C++:如何在 LUA 代码中正确使用 C++ 函数
- 我应该如何编写用C++代码编写的Lua API/对象模型的文档
- 将 Lua 代码转换为C++
- 如何从 Lua 上下文中卸载代码
- 调试嵌入式 Lua 5.2.2 代码
- 我可以将我的c++代码绑定到lua并将其开发到某个lua游戏引擎吗
- tolua++从C++代码中调用Lua函数
- 如何制作具有结构数组的菜单(将lua代码转换为c++代码)
- 编译lua代码,存储字节码,然后加载并执行它
- 解析lua脚本并连接c++代码
- 为什么当我的lua代码抛出错误时,我无法捕获luabind::error异常?
- 某些lua/c++代码中出现SIGSEGV错误