解析关于Lua调试器案例实现

文章介绍了如何实现一个Lua调试器,实现Lua调试器的目的仅仅是寄希望借此熟悉Lua源代码。所编写的Lua调试器功能越强,表明你对Lua源码越了解。

先前用lua写过一些应用,感觉Lua是一个很小巧的语言,Lua源代码无疑是研究语言相关的首选。“Lua虽小,五脏俱全”!为了研究Lua源代码,就打算着手写一个简单的Lua调试器,发现其中还是有些收获的,特记录如下。

作为一个调试器,应该支持一些最简单而又常用的功能,比如:单步跟踪、输出调试信息、设置断点等。要探索如何实现Lua调试器,还是带着这些问题去找答案吧。本文使用的开发环境为:win7,lua 5.1.4源代码。

Lua虚拟机是如何暂停的

Lua虚拟机和普通的CPU一样,包含两部分:数据存储区和逻辑控制区。数据存储区对应着CPU的寄存器、状态等,在Lua中实际上就是lua_State。逻辑控制区对应着CPU的每条指令的具体实现。Lua虚拟机逻辑控制区的相关的源代码位于lvm.c中。其中,执行Lua指令的函数为luaV_execute。

为了方便调试,函数luaV_execute在执行每条Lua指令之前,会去查找是否存在调试钩子(hook):存在的话,去执行钩子。然后,判断Lua虚拟机的状态是否为暂停,若是的话就返回,而不执行当前Lua指令。若不存在调试钩子,则正常执行Lua指令。

相关推荐