断点调式的支持
前言
很多群友都问怎样调试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
如果你的服务不是在本地启动,启动skynet_fly
的机器又没发连接到你本地,那就需要再安装Remote SSH
插件。
按ctrl shift + P
设置远程连接。
之后用vscode
打开远程连接上对应项目。
在远程上再安装luaHelper
插件。
配置插件
点击创建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 test
sh make.sh
sh make/script/restart.sh load_mods_debug.lua 0
即可命中断点。
使用限制
限制一 不支持多服务同时调试
可以看到配置项是指定了调试的可热更服务名
和对应的启动下标
。
1 |
|
限制二 正式服别用
调试开启会影响性能,不配置相关配置就不会使用了
非可热更服务如何调试
自行在服务中加载luaPanda
即可。require("skynet-fly.LuaPanda").start('127.0.0.1', 8818);