如何远程调试 Lua?
我正在寻找远程调试Lua的最佳方法(比如通过Web浏览器)。
我看到了[RemDebug](http://www.keplerproject.org/remdebug/),但是该项目最后更新是在2006年。它适用于Lua 5.0和5.1,但Lua 5.2非常接近,我不认为RemDebug会很快得到更新。
我可以在我的调试主机上安装一个小型嵌入式Web服务器,并使用类似RemDebug的东西与其通信,并通过HTTP执行远程调试。
欢迎提供建议。
原文链接 https://stackoverflow.com/questions/5438751
这是以下脚本(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 远程调试器 运行您要调试的程序 此时,您可以在另一个窗口中运行目标程序(假设您在 Windows 系统上的 C:\ development\kepler 中运行 test.lua):
%lua50 test.lua 现在回到您运行 controller.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 运行 你随时可以更改应用程序窗口,以查看它的输出。回到调试器会话:
在文件 C:/development/kepler/test.lua 第19行暂停
运行 在文件 C:/development/kepler/test.lua 第19行暂停 eval tab.foo 2 eval tab.bar 2 exec old_tab = tab nil exec tab = 2 nil eval tab 2 exec tab = old_tab nil eval tab.foo 2 运行 在文件 C:/development/kepler/test.lua 第19行暂停 eval tab.foo 4 delb test.lua 19 setw tab.foo == 32 插入观察表达式编号1 运行 在文件 C:/development/kepler/test.lua 第17行暂停 (观察表达式1:[tab.foo = 32]) eval tab.foo 32 delw 1 运行 程序已结束
不知道为什么需要通过 web 浏览器进行调试(这个想法对我来说有些奇怪,也许你可以详细解释一下为什么需要一个网页浏览器调试器?)
然而,对于一个独立的调试器,我编写了一个带有 GUI 的远程调试器:http://cushy-code.com/grld
它通过 socket API 与被调试的程序通信,因此任何网络连接都可以,不需要 HTTP。
希望这可以帮到你。
我基于 RemDebug (MobDebug)开发了一个新的调试器,加入了新的命令、新特性、错误修复和与 IDE 的集成。
MobDebug 基于调试客户端(debugee)和调试控制器(controller)之间的 TCP 交互。这也适用于 RemDebug 和大多数其他远程调试器。您可能可以在其他协议之上运行(例如WebSockets或HTTP),但仍需要能够运行协程和调试钩子来控制正在调试的应用程序。
调试过程的架构非常简单:
- 您有一个要调试的应用程序
- 您也有一个带有控制器的调试器
- 应用程序加载调试器的客户端组件,该组件打开与控制器的连接。
- 控制器从命令行或 IDE(MobDebug 提供了两者;它与 ZeroBraneStudio 集成,还提供了一种可编写脚本运行它的方式)接受命令。
- 当应用程序加载时,调试器安装调试钩子,该钩子在每个行/调用/返回上运行。从此调试钩子中,进行了一个恢复调用以连到调试器,该调试器然后可以执行控制器中的命令(如安装断点、求值表达式等)。当发送下一个可执行命令(如运行或步进)时,调试器会回到钩子,然后返回到应用程序,允许其继续进行。
可能可以模仿现有的 socket 接口(因为它只使用连接/发送/接收和选择/超时来中止应用程序),并重用大部分库。尽管可以在支持 TCP 的任何设备上运行应用程序(我有一个正在运行于移动设备上的应用程序,并从我的桌面运行的调试器工作原型),但我仍不确定为什么您想要在浏览器中运行此应用程序。
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
我不能确定你是需要远程调试 Lua 还是询问通过 HTTP 远程调试 Lua 的方法;我回答前者并不知道通过 HTTP 如何实现。
LuaEdit 和 Decoda 都允许您远程连接到正在运行的 Lua 脚本(无论是在同一台机器的不同进程上还是在远程机器上)。
Decoda 可以通过神奇的方法,在不对 Lua VM 进行任何更改的情况下远程调试;而对于 LuaEdit,您需要以特定方式创建 VM,使用提供的 DLL 或库。