我正在寻找远程调试Lua的最佳方法(例如从网络浏览器)。
我看到RemDebug,但最后一次项目更新是在2006年完成的。它适用于Lua 5.0和5.1,但是Lua 5.2非常接近,我没有看到RemDebug很快就能获得更新。
我可以在我的调试主机上安装一个小型嵌入式Web服务器,并使用类似RemDebug的方式与之通信,并通过HTTP执行远程调试。
建议表示赞赏。
答案 0 :(得分:12)
我开发了一个基于RemDebug(MobDebug)的新调试器,它具有新命令,新功能,错误修正以及与IDE的集成。
MobDebug基于客户端(debugee)和服务器(控制器)之间的TCP交互。 RemDebug和大多数其他远程调试器也是如此。您可能能够运行其他东西(如WebSockets或HTTP),但您仍然需要能够运行协同程序和调试挂钩来控制正在调试的应用程序。
调试过程的架构非常简单:
可以模仿现有的套接字接口(因为它只使用connect / send / receive和select / timeout来中止应用程序)并重用大部分库。我仍然不确定你为什么要在浏览器中运行它,因为你可以在任何支持TCP的应用程序上运行应用程序(我有一个工作原型从桌面调试在移动设备上运行的应用程序)。 / p>
答案 1 :(得分:2)
答案 2 :(得分:1)
我不确定您是否需要远程调试lua或通过HTTP询问这样做;我正在回答关于前者的问题,并且我不知道通过HTTP这样做的方法。
LuaEdit和Decoda都允许您远程连接到正在运行的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。
希望这有帮助。