调试嵌入式 Lua
如何调试嵌入在C++应用程序中的Lua代码?
据我所知,要么我需要购买一个特殊的IDE并链接他们特定的Lua运行时(很烦)。要么我需要在游戏引擎中构建一个调试控制台,使用lua debug API调用。
我倾向于编写自己的调试控制台,但这似乎需要大量工作。我本来可以更好地花时间去优化游戏的其他部分。
原文链接 https://stackoverflow.com/questions/780448
我不知道调用DebuggerBreak应该如何工作,因为那是.NET特定的。我认为这只适用于针对CLR的分叉Lua。
如果您使用标准Lua,您可以通过lua功能调用debug.debug()获得一些基本的调试工具。这将使Lua进入您的控制台,因此如果您从控制台运行lua,则应该能够交互式发出lua命令以检查当前状态。debug.debug()不会将您放在当前堆栈帧中,因此您必须使用debug.getlocal()来读取变量的值。
我自己还没有尝试过,但我实际上不认为制作自己的可用调试控制台需要花费太多工作。请记住,Lua不像C++这样的复杂语言,因此做这个比制作像gdb一样的真正的C++调试器要容易得多。
我认为已经有很多人做过类似的事情,您可以查看其代码。这里是一个仅用Lua编写的CLI调试器,您可以使用和修改以符合您的需求。
有几个工具可以做你想要的部分功能。我见过有关 Visual Studio 插件的引用,Windows 上有基于 Lua 的 SciTE 调试器扩展,还有 Kepler 项目的 RemDebug,以及他们的 LuaEclipse。
RemDebug 可能是你需要的东西,因为它是专门为调试使用 Lua 编写的 CGI 脚本而构建的。它需要访问 LuaSocket 模块来提供目标脚本和控制器之间的通信通道,以及其他几个模块。
更大的问题可能是能否从游戏引擎通过脚本沙盒加载任意模块。如果你对引擎有一定的控制权,那么这就不是太大的问题。
例如,Adobe Lightroom 插件的开发人员目前无法实现这一点,因为 Lightroom 不在插件的沙盒中公开“require”。
令我惊讶的是,我在使用 Lua 时很少感到需要调试器。我为各种项目构建了几个小应用程序,并惊讶于完整堆栈回溯和偶尔的“print”调用可以定位“require“无法预防的错误。
怎么样使用 Decoda??有个视频教怎样使用它,它对嵌入的 Lua 源码的支持很好(我是一位快乐的客户)。而且价格也相当实惠。
你可以使用我的调试器:GRLD(图形远程 Lua 调试器)。与 RemDebug 一样,它使用套接字连接,但与 RemDebug 不同的是它有一个漂亮的图形界面。源代码已提供,因此您可以使其在任何平台上运行。它适用于标准的 Lua 运行时。非商业用途免费使用。
编辑:抱歉,我不得不关闭网站,因此该软件不能再下载。如果我有时间,我可能会将其作为开源软件发布。
编辑 2:链接已更新,在 MIT 许可证下(开源)托管在 Github 上。
你不需要编写自己的控制台,因为你可能想要从现有的控制台之一开始。已经建议使用 RemDebug;我一直在开发基于 RemDebug 的调试器 MobDebug,但增加了许多新功能和错误修复。更改的详细列表在 README 中。
在你的脚本中启用调试可能就像添加 require('mobdebug').start()
一样简单(如果你在同一台机器上运行你的应用和调试器服务器)。这应该会尝试连接到默认端口上监听本地主机的调试器。你可以使用 MobDebug 中包含的命令行界面,或者你可以使用 ZeroBrane Studio,这是一个与 MobDebug 集成以提供调试功能的 Lua IDE。该 IDE 支持 Love2d、Moai 和其他 Lua 引擎的调试,并可能适用于你的设置。
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
如果你使用的是 Windows 和 VS - 你能用我们使用的技巧吗?
将 Lua 代码复制到一个文件中。然后在 Lua 代码中调用 Debugger API(在 C++ 中是
DebuggerBreak()
,可以参考 这里)。当 Lua 代码执行时,调试器会启动,你应该能够指定文件。然后像平常一样进行调试?