2011-03-25 97 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