Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
调试嵌入式Lua < >如何调试嵌入在C++应用程序中的Lua代码?_C++_Debugging_Lua - Fatal编程技术网

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

调试嵌入式Lua < >如何调试嵌入在C++应用程序中的Lua代码?,c++,debugging,lua,C++,Debugging,Lua,据我所知,要么我需要购买一个特殊的IDE,并在其特殊的lua运行时(ugh)中链接。或者我需要使用调用在游戏引擎中构建一个调试控制台 我倾向于编写自己的调试控制台,但这似乎需要做很多工作。如果你使用windows和VS,你能使用我们使用的技巧吗 将lua代码复制到文件中。然后在Lua代码中调用调试器API(C++中的代码为>调试-中断)( >我想-见)。然后,当lua代码执行时,调试器将启动,您应该能够指定该文件。然后正常调试?我不知道调用DebuggerBreak应该如何工作,因为这是特定于.

据我所知,要么我需要购买一个特殊的IDE,并在其特殊的lua运行时(ugh)中链接。或者我需要使用调用在游戏引擎中构建一个调试控制台


我倾向于编写自己的调试控制台,但这似乎需要做很多工作。如果你使用windows和VS,你能使用我们使用的技巧吗


将lua代码复制到文件中。然后在Lua代码中调用调试器API(C++中的代码为>调试-中断)(<代码> >我想-见)。然后,当lua代码执行时,调试器将启动,您应该能够指定该文件。然后正常调试?

我不知道调用DebuggerBreak应该如何工作,因为这是特定于.NET的。我假设这只适用于以CLR为目标的分叉Lua

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

我自己还没有试过,但我实际上并不认为制作自己的调试控制台有那么多工作要做。记住Lua不是像C++那样复杂的语言,所以做这件事比制作一个像GDB这样的C++调试器要容易得多。
我认为有很多人已经做过类似的事情,你可以看看他们的代码。CLI调试器仅用lua编写。只有一个lua文件。不应该很难根据您的需要使用和修改。

有几种工具可以做您想要的部分工作。我看到了对VS插件的引用,在LuaforWindows中有一个SciTE调试器扩展,还有开普勒项目的,以及它们的

RemDebug可能正处于您需要的轨道上,因为它是为了调试用Lua编写的CGI脚本而构建的。它确实需要访问LuaSocket模块,以便在目标脚本和控制器以及两个其他模块之间提供通信通道

一个更大的问题可能是从游戏引擎放置在脚本周围的任何沙箱中加载任意模块的能力。如果你能控制引擎,那就不会有那么大的问题了

例如,Adobe Lightroom插件的开发人员目前无法做到这一点,因为Lightroom不会在插件的沙箱中公开
require

令我惊讶的是,在使用Lua时,我很少感觉到需要调试器。我已经为各种项目在it中构建了几个小应用程序,并惊讶于完整的堆栈回溯和偶尔的
print
调用的组合能够很好地定位
要求“严格”
一开始无法防止的bug。

怎么样??有一段视频解释了如何使用它,对于嵌入式lua源代码来说,它非常有效。(我是一个快乐的顾客)。而且它非常便宜。

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

编辑:对不起,我不得不关闭网站,所以软件不能再下载了。如果我有时间的话,我以后可能会把它作为开源软件发布


编辑2:链接已更新,现在在麻省理工学院许可证(开源)下托管在github中。

您不需要编写自己的控制台,因为您可能希望从现有控制台中的一个开始。RemDebug已经被提出;我一直在开发MobDebug,这是一个基于RemDebug的调试器,但是有很多新特性和错误修复。有关更改的详细列表,请参见


在脚本中启用调试可能非常简单,只需添加
require('mobdebug').start()
(如果您在同一台计算机上运行应用程序和调试器服务器)。这应该尝试连接到本地主机上默认端口上侦听的调试器。您可以使用MobDebug中包含的命令行界面,也可以使用,这是一个与MobDebug集成以提供调试功能的Lua IDE。IDE支持对Love2d、Moai和其他Lua引擎进行调试,并且可能也适用于您的设置。

这解决了一半问题。我真正想做的是逐行执行lua代码。如果在理解您的解决方案,我将能够在任何一个行中的LUA脚本,但我将在C++调试器。我将如何检查局部lua变量等等。我认为这是一个分为两部分的问题——第一部分是简单的检查,这将很难,因为您需要编写调试器扩展来完成这项工作。第二种方法是确定lua“引擎”如何存储这些值,并手动或通过宏检查它们。RemDebugger几乎正是我想要的。它应该是可用的,因为是,给我一个很好的基础来定制。我使用Decoda,也很高兴它。它与您的项目无缝连接,不需要任何设置。甚至可以用DEXDA调试Lua,同时可以用另一个调试器调试C++。我唯一的抱怨是开发者(未知世界)手中有一个更高优先级的项目(自然选择2),所以我的支持请求没有得到回应。(结果证明我的问题不是德科达的错)。此外,项目列表不支持树状视图,因此一旦获得大量文件,它就可以变成一个长列表。