我正在寻找远程调试Lua的最佳方法(例如从Web浏览器中进行调试)。
我看到了RemDebug,但是该项目的最后一次更新是在2006年。它适用于Lua 5.0和5.1,但Lua 5.2非常接近,我不认为RemDebug会很快得到更新。
我可以在我的调试主机上挂载一个小型嵌入式Web服务器,使用类似RemDebug的东西与其通信,并通过HTTP进行远程调试。
欢迎提出建议。
我正在寻找远程调试Lua的最佳方法(例如从Web浏览器中进行调试)。
我看到了RemDebug,但是该项目的最后一次更新是在2006年。它适用于Lua 5.0和5.1,但Lua 5.2非常接近,我不认为RemDebug会很快得到更新。
我可以在我的调试主机上挂载一个小型嵌入式Web服务器,使用类似RemDebug的东西与其通信,并通过HTTP进行远程调试。
欢迎提出建议。
我基于 RemDebug(MobDebug) 开发了一个新的调试器,增加了新的命令、新特性、修复了 bug,并与 IDE 进行了集成。
MobDebug 基于客户端(被调试者)和服务器(控制器)之间的 TCP 交互,这也适用于 RemDebug 和其他大多数远程调试器。你可能能够在其他协议之上运行(例如 WebSockets 或 HTTP),但仍需要能够运行协程和调试钩子来控制被调试的应用程序。
调试过程的架构非常简单:
可能可以模仿现有的 socket 接口(因为它只使用 connect/send/receive 和 select/timeout 来中止应用程序),并重用大部分库。但我仍不确定为什么你想在浏览器中运行它,因为你已经可以在支持 TCP 的任何设备上运行应用程序(我有一个工作原型,在我的桌面上调试运行在移动设备上的应用程序)。
我不确定这是否正确。但希望它能有所帮助:
源代码: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:/development/kepler/ step 暂停在文件C:/development/kepler/test.lua第6行 over 暂停在文件C:/development/kepler/test.lua第7行 over 暂停在文件C:/development/kepler/test.lua第10行 over 暂停在文件C:/development/kepler/test.lua第15行 setb test.lua 19 run 您可以随时切换到应用程序窗口以查看其输出。返回调试器会话:
暂停在文件C:/development/kepler/test.lua第19行
运行 在文件C:/development/kepler/test.lua的第19行暂停 评估tab.foo 2 评估tab.bar 2 执行old_tab = tab nil 执行tab = 2 nil 评估tab 2 执行tab = old_tab nil 评估tab.foo 2 运行 在文件C:/development/kepler/test.lua的第19行暂停 评估tab.foo 4 删除test.lua的第19行 设置watch exp no. 1为tab.foo == 32 插入观察表达式1 运行 在文件C:/development/kepler/test.lua的第17行暂停 (观察表达式1:[tab.foo = 32]) 评估tab.foo 32 删除观察表达式1 运行 程序完成不知道为什么需要Web浏览器调试(这个想法对我来说有点奇怪,也许您可以详细说明为什么需要Web浏览器调试?)
然而,对于独立的调试器,我编写了一个带有GUI的远程调试器:http://cushy-code.com/grld
它使用套接字API与被调试程序通信,因此任何网络连接都可以,无需HTTP。
希望这可以帮到您。