2011-03-25 68 views
13

我正在寻找远程调试Lua的最佳方式(如从网页浏览器)。如何远程调试Lua?

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

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

建议表示赞赏。

+0

我不确定我明白你为什么需要基于浏览器的客户端。是一个基于全面调试器的客户端吗? – 2011-04-01 10:40:28

+0

嘿,那里,我在游戏开发工作,我需要一些通用的,我可以编译和运行在几个架构。制作一个基于Web浏览器的客户端对我来说是理想的选择。 – Goles 2011-04-01 15:13:00

回答

1

我不确定是否需要远程调试lua或通过HTTP询问有关情况;我正在回答有关前者的问题,并且我不知道通过HTTP执行此操作的方法。

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

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

+0

这不是基于网络的......我正在考虑自己开发基于Web的客户端,但我需要一些指针。 – Goles 2011-04-01 15:13:39

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窗口(这里假设你是C内运行test.lua:在Windows系统上\研发\开普勒):

在暂停文件C:/development/kepler/test.lua 类型 '帮助' 的命令

BASEDIR C:/开发/开普勒/ 新基地目录为C:/开发/开普勒/ 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 EVAL tab.bar EXEC old_tab =标签 零 EXEC标签= 2 零 EVAL标签 EXEC标签= old_tab 零 EVAL tab.foo 运行 在文件C暂停:/development/kepler/test.lua线19 delb test.lua 19 运输及工务局局长tab.foo == 32 插入的0的eval tab.foo观看EXP没有。 1个 运行 在文件C暂停:/development/kepler/test.lua线17 (监视表达式1:[tab.foo = 32]) EVAL tab.foo DELW 1个 运行 程序完成

+1

在原来的问题中,我指出我看到了RemDebug,但Lua 5.2非常接近,并且我没有看到RemDebug很快就能获得更新。我真的不认为这是对我的问题的合适答案。 – Goles 2011-04-10 17:52:55

0

不知道是不是网页浏览器的调试(的想法似乎怪我,也许你可以详细解释您需要一个网络浏览器调试器?)

对于独立得不但是,我写了一个远程调试器与GUI:http://cushy-code.com/grld

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

希望这会有所帮助。

+2

这听起来很有趣,但我需要一个开源解决方案来理解如何去做。 (问题是“如何远程调试lua”)谢谢。 – Goles 2011-08-02 07:45:18

10

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

MobDebug是基于客户机(调试者)和服务器(控制器)之间的TCP相互作用。 RemDebug和大多数其他远程调试器也是如此。您也许能够对别的东西(如网页套接字或HTTP)上运行,但你仍然需要能够运行协同程序和调试钩来控制被调试的应用程序。

调试过程的结构很简单:

  • 你要调试
  • 你也有你的调试器与控制器
  • 应用程序的应用程序加载的客户端组件调试器,这将打开到控制器
  • 控制器接受来自命令行或一个IDE命令的连接(MobDebug同时提供,它与ZeroBraneStudio集成,并且还提供一个脚本的方法来运行它)
  • 当应用程序被加载时,调试器安装调试钩,这是在每行/调用/返回运行。从这个调试钩子开始,调试器会执行一个简历调用,然后可以从控制器执行命令(如安装断点,评估表达式等)。当下一个可执行命令发送时(如run或step),调试器回到钩子,然后返回到应用程序允许它继续。

可能会模仿现有的套接字接口(因为它只使用连接/发送/接收和选择/超时来中止应用程序)并重用大部分库。我仍然不确定为什么你想在浏览器中运行它,因为你可以在任何支持TCP的应用程序上运行应用程序(我有一个工作原型正在调试从我的桌面移动设备上运行的应用程序)。

+0

我真的很喜欢我在这里看到的...我会试试! – Goles 2012-06-14 18:00:24

+0

您的调试器看起来不错!是否有初学者教程(我已经看过示例文件夹)?有些事情不是自我解释,“帮助”也不是那么彻底。 – Atcold 2015-01-29 21:57:01

+0

@Atcold,您可能需要查看[本概述](http://studio.zerobrane.com/doc-lua-debugging)和其他[调试相关链接](http://studio.zerobrane.com/documentation的.html#调试)。它们是从IDE用户的角度出发的,但由于所有功能都基于MobDebug提供的功能,因此它可以让您更深入地了解它的工作原理。 – 2015-01-29 22:34:33