Skip to content
fesily edited this page Mar 4, 2022 · 8 revisions

非作者写的,不一定正确

代码有三个部分:vscode的插件,debug adapter,debugger;具体的架构可以看vscode的开发文档.

1. vscode插件

最简单的部分,就是初始化相关的内容,大部分的代码就是配置校验.

代码位于extension/js文件夹下.

2. debug adapter

  1. 负责启动目标进程(launch模式)
  2. 初始化与debugger的通信,windows下执行dll注入
  3. 包装vscode的消息转发给debugger

该模块的下变量client对于vscode,变量server对于debugger

代码位于extension/script/frontend文件夹下.


以下不写frontend所在的目录了

main.lua里run()是主循环, update()处理vscode发过来的消息,proxy.update()处理debugger发过来的消息

3. debugger

调试器分成了两块,worker和master.

worker是实际的调试器,master负责和adapter通信

入口在script/debugger.lua,start()启动了加载了remotedebug动态库,并且初始了一个内置lua5.4虚拟机来启动master和woker.

worker主循环在mgr.lua,master主循环在woker.lua,其中会启动二个线程一个是打印错误消息,一个是master线程,worker直接运行在宿主线程

所以master和worker是1对N的关系,通过thread.channel对象.通信master处理DbgMaster对象,worker处理wokerChannel对象

代码位于extension/script/backend文件夹下.