如何远程调试Lua?

时间:2011-03-25 22:25:09

标签: debugging http lua

我正在寻找远程调试Lua的最佳方法(例如从网络浏览器)。

我看到RemDebug,但最后一次项目更新是在2006年完成的。它适用于Lua 5.0和5.1,但是Lua 5.2非常接近,我没有看到RemDebug很快就能获得更新。

我可以在我的调试主机上安装一个小型嵌入式Web服务器,并使用类似RemDebug的方式与之通信,并通过HTTP执行远程调试。

建议表示赞赏。

5 个答案:

答案 0 :(得分:12)

我开发了一个基于RemDebug(MobDebug)的新调试器,它具有新命令,新功能,错误修正以及与IDE的集成。

MobDebug基于客户端(debugee)和服务器(控制器)之间的TCP交互。 RemDebug和大多数其他远程调试器也是如此。您可能能够运行其他东西(如WebSockets或HTTP),但您仍然需要能够运行协同程序和调试挂钩来控制正在调试的应用程序。

调试过程的架构非常简单:

  • 您有一个要调试的应用程序
  • 您还拥有带控制器的调试器
  • 应用程序加载调试器的客户端组件,从而打开与控制器的连接
  • 控制器接受来自命令行或IDE的命令(MobDebug提供两者;它与ZeroBraneStudio集成,并提供可编写脚本的方式来运行它)
  • 加载应用程序时,调试器会安装一个调试挂钩,该挂钩在每一行/ call / return上运行。从这个调试钩子中,对调试器进行恢复调用,调试器然后可以从控制器执行命令(比如安装断点,计算表达式等)。当发送下一个可执行命令时(如运行或步骤),调试器返回到钩子,然后返回到应用程序以允许它继续。

可以模仿现有的套接字接口(因为它只使用connect / send / receive和select / timeout来中止应用程序)并重用大部分库。我仍然不确定你为什么要在浏览器中运行它,因为你可以在任何支持TCP的应用程序上运行应用程序(我有一个工作原型从桌面调试在移动设备上运行的应用程序)。 / p>

答案 1 :(得分:2)

答案 2 :(得分:1)

我不确定您是否需要远程调试lua或通过HTTP询问这样做;我正在回答关于前者的问题,并且我不知道通过HTTP这样做的方法。

LuaEditDecoda都允许您远程连接到正在运行的lua脚本(在同一台计算机和远程计算机上的不同进程上)。

Decoda可以为魔法虚拟机做魔术而不需要对VM进行任何更改;使用LuaEdit,您需要使用提供的DLL或库以特定方式创建VM。

答案 3 :(得分:1)

我不确定这是不对的。希望它有所帮助:

来源:http://www.keplerproject.org/remdebug/example.html

以下脚本(test.lua)的调试会话示例:

 1    require"remdebug.engine"
 2
 3    remdebug.engine.start()
 4    
 5    local tab = {
 6      foo = 1,
 7      bar = 2
 8    }
 9
10    print("Start")
11
12    function bar()
13      print("In bar 1")
14      print("In bar 2")
15    end
16
17    for i = 1, 10 do
18      print("Loop")
19      bar()
20      tab.foo = tab.foo * 2
21    end
22
23    print("End")

首先运行RemDebug控制器:

%lua50 controller.lua Lua远程调试器 运行要调试的程序 此时您可以运行目标程序(在另一个窗口中):

%lua50 test.lua 现在返回运行controller.lua的窗口(假设您在Windows系统上的C:\ development \ kepler中运行test.lua):

暂停在文件C:/development/kepler/test.lua 为命令键入“help”

  

basedir C:/ development / kepler /   新的基目录是C:/ development / kepler /   BASEDIR   C:/开发/开普勒/   步   暂停在文件C:/development/kepler/test.lua第6行   过度   暂停在文件C:/development/kepler/test.lua第7行   过度   暂停在文件C:/development/kepler/test.lua第10行   过度   暂停在文件C:/development/kepler/test.lua第15行   setb test.lua 19   跑   您可以随时切换到应用程序窗口以查看其输出。返回调试器会话:

暂停在文件C:/development/kepler/test.lua第19行

  

运行   暂停在文件C:/development/kepler/test.lua第19行   eval tab.foo   2   eval tab.bar   2   exec old_tab = tab   零   exec tab = 2   零   评估标签   2   exec tab = old_tab   零   eval tab.foo   2   跑   暂停在文件C:/development/kepler/test.lua第19行   eval tab.foo   4   delb test.lua 19   setw tab.foo == 32   插入的手表exp no。 1   跑   暂停在文件C:/development/kepler/test.lua第17行     (观察表达式1:[tab.foo = 32])   eval tab.foo   32   露出1   跑   程序完成

答案 4 :(得分:0)

不知道网页浏览器调试(这个想法对我来说似乎很奇怪,也许你可以详细解释为什么你需要一个网络浏览器调试器?)

对于独立调试器,我已经编写了一个带GUI的远程调试器:http://cushy-code.com/grld

它使用套接字API与调试的程序通信,因此任何网络连接都可以,不需要HTTP。

希望这有帮助。