用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 阅读(4719)
评论(3) 编辑 收藏 引用