断点调式的支持
前言
很多群友都问怎样调试skynet_fly,于是就有了对单点调式的支持,调式对于老手来说并不是那么的必要,对于新手来说确实有助于编码学习,毕竟刚学编程那会儿也比较依赖调试,后面逐渐习惯用打印日志的方式查找问题。
实现方案
在vscode有部分插件说支持了对skynet的调试,我跟着他们的步骤进行操作,都没能成功调试。
之后尝试能不能用lua helper插件支持的调式功能。研究之后发现lua helper是引入了lua panda,lua panda在xlua,slua等等都有引入,也比较成熟稳定,就开始尝试引入,引入luaPanda,只需要将luaPanda.lua文件加入到skynet_fly在需要调用的服务中加载并连接调试端口即可。由于luaPanda.lua依赖luaSocket,我也尝试过直接用skynet中的socket,但是debug.sethook中调用携程挂起会报错,所以只能把luasocket也引入进来。
对skynet的修改
由于luaPanda.lua有重写coroutine.create函数,但是skynet.lua对coroutine.create做了局部引用,使得重写的函数没被调用到,导致断点调试没法生效。
只能把skynet.lua中对coroutine.create函数的局部引用去掉。
调用方式
lua panda 采用的调试方式是远程调试,vscode作为server端通常监听8818端口,skynet_fly作为客户端进行连接。
安装插件
需要下载安装插件luaHelper
linux系统
如果你的服务不是在本地启动,启动skynet_fly的机器又没发连接到你本地,那就需要再安装Remote SSH插件。
按ctrl shift + P设置远程连接。
之后用vscode打开远程连接上对应项目。
在远程上再安装luaHelper插件。
windows系统
直接跑skynet_fly的windows 版本即可,断点调式。
配置插件
点击创建launch.json,选择luaHelper
把stopOnEntry(调试器启动后自动停止在调用的第一行代码处) 配置项改为false。
1 | |
设置断点
在skynet_fly有一个调试示例。test/module/debug_test_m.lua 对应load_mods_debug.lua启动配置。
load_mods_debug.lua
1 | |
设置好断点。
luaHelper调试启动
按F5即可。
启动skynet_fly程序
cd testsh make.shsh make/script/restart.sh load_mods_debug.lua 0

即可命中断点。
使用限制
限制一 不支持多服务同时调试
可以看到配置项是指定了调试的可热更服务名和对应的启动下标。
1 | |
限制二 正式服别用
调试开启会影响性能,不配置相关配置就不会使用了
非可热更服务如何调试
自行在服务中加载luaPanda即可。require("skynet-fly.LuaPanda").start('127.0.0.1', 8818);