调试嵌入式 Lua

如何调试嵌入在C++应用程序中的Lua代码?

据我所知,要么我需要购买一个特殊的IDE并链接他们特定的Lua运行时(很烦)。要么我需要在游戏引擎中构建一个调试控制台,使用lua debug API调用。

我倾向于编写自己的调试控制台,但这似乎需要大量工作。我本来可以更好地花时间去优化游戏的其他部分。

原文链接 https://stackoverflow.com/questions/780448

点赞
stackoverflow用户30225
stackoverflow用户30225

如果你使用的是 Windows 和 VS - 你能用我们使用的技巧吗?

将 Lua 代码复制到一个文件中。然后在 Lua 代码中调用 Debugger API(在 C++ 中是 DebuggerBreak(),可以参考 这里)。当 Lua 代码执行时,调试器会启动,你应该能够指定文件。然后像平常一样进行调试?

2009-04-23 06:34:30
stackoverflow用户66634
stackoverflow用户66634

我不知道调用DebuggerBreak应该如何工作,因为那是.NET特定的。我认为这只适用于针对CLR的分叉Lua。

如果您使用标准Lua,您可以通过lua功能调用debug.debug()获得一些基本的调试工具。这将使Lua进入您的控制台,因此如果您从控制台运行lua,则应该能够交互式发出lua命令以检查当前状态。debug.debug()不会将您放在当前堆栈帧中,因此您必须使用debug.getlocal()来读取变量的值。

我自己还没有尝试过,但我实际上不认为制作自己的可用调试控制台需要花费太多工作。请记住,Lua不像C++这样的复杂语言,因此做这个比制作像gdb一样的真正的C++调试器要容易得多。

我认为已经有很多人做过类似的事情,您可以查看其代码。这里是一个仅用Lua编写的CLI调试器,您可以使用和修改以符合您的需求。

2009-04-23 11:02:59
stackoverflow用户68204
stackoverflow用户68204

有几个工具可以做你想要的部分功能。我见过有关 Visual Studio 插件的引用,Windows 上有基于 Lua 的 SciTE 调试器扩展,还有 Kepler 项目的 RemDebug,以及他们的 LuaEclipse

RemDebug 可能是你需要的东西,因为它是专门为调试使用 Lua 编写的 CGI 脚本而构建的。它需要访问 LuaSocket 模块来提供目标脚本和控制器之间的通信通道,以及其他几个模块。

更大的问题可能是能否从游戏引擎通过脚本沙盒加载任意模块。如果你对引擎有一定的控制权,那么这就不是太大的问题。

例如,Adobe Lightroom 插件的开发人员目前无法实现这一点,因为 Lightroom 不在插件的沙盒中公开“require”。

令我惊讶的是,我在使用 Lua 时很少感到需要调试器。我为各种项目构建了几个小应用程序,并惊讶于完整堆栈回溯和偶尔的“print”调用可以定位“require“无法预防的错误。

2009-04-24 07:13:59
stackoverflow用户207190
stackoverflow用户207190

怎么样使用 Decoda??有个视频教怎样使用它,它对嵌入的 Lua 源码的支持很好(我是一位快乐的客户)。而且价格也相当实惠。

2009-11-09 20:58:45
stackoverflow用户908326
stackoverflow用户908326

你可以使用我的调试器:GRLD(图形远程 Lua 调试器)。与 RemDebug 一样,它使用套接字连接,但与 RemDebug 不同的是它有一个漂亮的图形界面。源代码已提供,因此您可以使其在任何平台上运行。它适用于标准的 Lua 运行时。非商业用途免费使用。

编辑:抱歉,我不得不关闭网站,因此该软件不能再下载。如果我有时间,我可能会将其作为开源软件发布。

编辑 2:链接已更新,在 MIT 许可证下(开源)托管在 Github 上。

2011-08-23 18:52:52
stackoverflow用户1442917
stackoverflow用户1442917

你不需要编写自己的控制台,因为你可能想要从现有的控制台之一开始。已经建议使用 RemDebug;我一直在开发基于 RemDebug 的调试器 MobDebug,但增加了许多新功能和错误修复。更改的详细列表在 README 中。

在你的脚本中启用调试可能就像添加 require('mobdebug').start() 一样简单(如果你在同一台机器上运行你的应用和调试器服务器)。这应该会尝试连接到默认端口上监听本地主机的调试器。你可以使用 MobDebug 中包含的命令行界面,或者你可以使用 ZeroBrane Studio,这是一个与 MobDebug 集成以提供调试功能的 Lua IDE。该 IDE 支持 Love2d、Moai 和其他 Lua 引擎的调试,并可能适用于你的设置。

2012-09-22 22:10:34