LuaPanda
LuaPanda copied to clipboard
随手写点,关于调试器的框架
luapanda是一个lua写的调试器。为了提高运行效率,我把调用热点hook使用C重写了一遍,做成了一个模块。调试器启动时会尝试去找这个模块,如果找到就用,找不到就使用lua hook完成功能。
在开发lua调试器之后我又开发了一个quickjs调试器,其中使用了CDP作为前后端通信协议,直接对接了VScode内建的JavaScript Debugger(商店搜索 @builtin JavaScript Debugger
能找到)。框架上也是使用了C hook核心+js逻辑的形态。以下是开发了两个调试器之后的一些想法:
- 脚本开发还是比C方便太多了,协议构建,字符串处理,三方库都能大大提升开发效率。
- 关于脚本的性能弱于原生语言,应该用合理的架构去优化,比如调用热点函数写成原生模块。
- CDP协议比较冗余,很多是用于chrome环境下的字段,开发调试器一般自定协议就行。特地使用CDP意义不大。
- CDP协议的时序似乎没有清晰的文档介绍。我在和 vscode JavaScript Debugger 前端对接时被时序折腾了很久(还得看 JavaScript Debugger 插件的源码,还没注释)。
- 所以还是得自己写插件,会稳定很多。我在对接遇 JavaScript Debugger 时遇到过几次vscode一升级,前后端就对不上了(人家是追着适配chrome, 我在后面追着适配它 ┓( ´——` )┏)
先想到想到这么多,有空再补吧