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