用Lua也有大半年了,從用Lua開始就想寫個Lua調試器,不過由于種種原因沒寫,這周上班抽了點時間寫了(我承認上班偷懶了,不過多是休息時間)。(點此下載)
Lua本身沒有提供調試器,不過它自帶了一個debug庫,提供了基本的變量值獲取和代碼執行hook,有了這些基本功能要寫一個調試器不難。
此調試器根據調試方式分為normal、step in、step over、next line四種mode,分別對應斷點、步進、跳出函數、執行下行的功能。斷點類型分為行斷點和函數斷點,分別在執行到相應行和相應函數的時候斷下。在斷下的時候就可以打印和修改變量,通過建立一個新的chunk并將環境設置成相應函數的環境,再執行chunk來獲取和修改變量。
因為是命令行的,在命令行還沒有機會添加斷點的時候,要添加斷點就要通過debugger.addfuncbreak和debugger.addlinebreak來添加函數和行斷點,通常Lua是用于C++的腳本語言,因此程序通常是有一個可以直接執行Lua腳本指令的入口,這樣的入口就可以打下第一個斷點,這樣在斷下斷點后就可以在命令提示符下做所有的操作了。
代碼是上班抽時間寫的,寫的很隨意,也沒多少注釋,權當玩具吧。目前的功能基本能滿足我的要求了,也不打算繼續改進了。調試器是用來幫助找錯誤,不要過分依賴調試器。Robert C. Martin說Debuggers are a wasteful Timesink。雖說有些偏激,但是不無道理。
posted on 2011-01-01 01:44
airtrack 閱讀(4764)
評論(3) 編輯 收藏 引用