2011-12-07 84 views
11

我的公司有一個程序,它在運行時使用Lua嵌入,從磁盤加載.lua文件並重復執行其中定義的函數。可附加到進程的Lua調試器

有沒有辦法在我的.lua文件中附加正在運行的進程並設置斷點? (我接受gdb樣式的命令行調試作爲Lua發行版的一部分,或者接受提供類似Visual-Studio的GUI斷點的第三方IDE)。

或者是我考慮到運行時的性質加載磁盤中的隨機文件,要求完全無意義且不可能?

編輯:看起來這不是荒謬的,因爲Lua的自己debug.getinfo()功能可確定給定函數的源文件,並debug.sethook()允許進入的代碼每個新行的回調。所以,從磁盤加載源代碼並且能夠告訴解釋器何時從該文件執行特定代碼行是合理的。問題依然存在:如何鎖定現有的具有Lua解釋器的進程並注入我自己的跟蹤功能(然後可以監視文件/行號對並暫停執行)?

回答

4

這是我經過多次搜索後使用的替代方案。如果你有一個加載lua的外部可執行文件,我幾分鐘就能完成這個工作。該操作非常靈敏,它具有一個交互式調試器,可以加載代碼,您可以交互地放置調試點。它沒有編輯器,但我使用scite或crimson編輯器並啓動可執行文件,主要lua模塊中的一行允許調試器。

http://www.cushy-code.com/grld/ - 此鏈接似乎死了,現在

我搬到eclipse.org/ldt它有一個IDE和集成調試器,我一直在使用Decoda編輯器所推薦

心連心

+0

我已經轉移到http://www.eclipse.org/koneki/ldt/它有一個IDE和集成調試器,推薦 – daven11

+0

上面的鏈接已經死亡。 –

9

如果你可以修改.lua文件,你可以插入以下調用需要調試一切事情之前:

require 'remdebug.engine'.start() 

它開始RemDebug的Lua調試器引擎,並試圖連接到控制器。如果無法連接,它將繼續正常運行。我對調試器引擎做了some fixes,比如處理臨時變量,而我的學生正在研究調試器GUI(明年到期)。

與此同時,你可以嘗試如果Lua Development Tools適合你。它具有一個debugger類似RemDebug,這應該是可能的設置如下:

require("debugger")(host, port, idekey) 

或者,你可以使用SciTE-debug,這是一個擴展到賽特編輯器,並可以作爲一個控制器RemDebug。只要確保你插入調用remdebug.engine.start某處你的Lua代碼,並插入到賽特輸出窗口此:

:debug.target=remote.lua 

當您啓動程序,賽特應該顯示源和電流線。

5

。它允許你附加到正在運行的C++應用程序,之後它會檢測到你正在C++代碼中運行一個Lua解釋器,並顯示你的Lua源代碼,你可以像往常一樣添加節點和檢查變量。

1

您應該使用Decoda
轉到Debug -> Processes -> Attach以附加您的過程。這應該很好。

3

類似於米哈爾Kottman描述,我已經實現了基於RemDebug調試器,但與其他修補程序和功能(在GitHub上:https://github.com/pkulchenko/MobDebug)。

您可以在要啓動調試的位置更新.lua文件,內容爲require("mobdebug").start("localhost", 8171)。然後可以使用命令行調試器來執行命令,設置斷點,評估/執行表達式等。

作爲一種替代方案,您可以使用ZeroBrane Studio IDE,它與調試器集成在一起,併爲您提供前端來加載代碼並在良好的GUI中執行相同的調試器命令。如果你想看到IDE在行動,我在這裏有一個簡單的演示:http://notebook.kulchenko.com/zerobrane/live-coding-in-lua-bret-victor-style

-1

那麼最簡單的方法是這樣的,感謝天才作家 https://github.com/slembcke/debugger.lua

你並不需要設置遠程調試服務器,只需要一個文件,並簡單地調用DBG(),它會暫停,就像gdb

一個教程也附帶它,檢查出來。

相關問題