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