解析关于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指令。
相关推荐
峰哥 2020-09-23
陈云佳 2020-08-15
wqiaofujiang 2020-07-05
wordmhg 2020-06-26
wqiaofujiang 2020-06-16
zllbirdonland 2020-06-16
eroshn 2020-06-10
长安长夜Saint 2020-06-07
Dawnworld 2020-06-07
fansenjun 2020-03-01
CSDNMrWang 2020-05-11
Dawnworld 2020-05-05
陈云佳 2020-04-21
Neptune 2020-04-20
shunelly 2020-04-16
aolishuai 2020-04-15
YukiRain 2020-04-14
陈云佳 2020-03-07
陈云佳 2020-03-05