断点调式的支持

前言

很多群友都问怎样调试skynet_fly,于是就有了对单点调式的支持,调式对于老手来说并不是那么的必要,对于新手来说确实有助于编码学习,毕竟刚学编程那会儿也比较依赖调试,后面逐渐习惯用打印日志的方式查找问题。

实现方案

vscode有部分插件说支持了对skynet的调试,我跟着他们的步骤进行操作,都没能成功调试。
之后尝试能不能用lua helper插件支持的调式功能。研究之后发现lua helper是引入了lua pandalua pandaxlua,slua等等都有引入,也比较成熟稳定,就开始尝试引入,引入luaPanda,只需要将luaPanda.lua文件加入到skynet_fly在需要调用的服务中加载并连接调试端口即可。由于luaPanda.lua依赖luaSocket,我也尝试过直接用skynet中的socket,但是debug.sethook中调用携程挂起会报错,所以只能把luasocket也引入进来。

对skynet的修改

由于luaPanda.lua有重写coroutine.create函数,但是skynet.luacoroutine.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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "LuaHelper-Debug",
"request": "launch",
"name": "LuaHelper-Attach",
"description": "通用模式,通常调试项目请选择此模式",
"cwd": "${workspaceFolder}",
"luaFileExtension": "",
"connectionPort": 8818,
"stopOnEntry": false, //改为false
"useCHook": true,
"autoPathMode": true
},
{
"type": "LuaHelper-Debug",
"request": "launch",
"name": "LuaHelper-DebugFile",
"description": "独立文件调试模式",
"luaPath": "",
"packagePath": [],
"luaFileExtension": "",
"connectionPort": 8818,
"stopOnEntry": true,
"useCHook": true
}
]
}

设置断点

skynet_fly有一个调试示例。
test/module/debug_test_m.lua 对应load_mods_debug.lua启动配置。

load_mods_debug.lua

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
return {
--共享配置
share_config_m = {
launch_seq = 1,
launch_num = 1,
default_arg = {
server_cfg = {
breakpoint_debug_module_name = "debug_test_m", --调试的可热更服务名
breakpoint_debug_module_index = 2, --启动下标
breakpoint_debug_host = "127.0.0.1", --vscode监听的IP
breakpoint_debug_port = 8818, --vscode监听的端口
}
},
},

debug_test_m = {
launch_seq = 1,
launch_num = 2,
}
}

设置好断点。

luaHelper调试启动

按F5即可。

启动skynet_fly程序

cd test
sh make.sh
sh make/script/restart.sh load_mods_debug.lua 0


即可命中断点。

使用限制

限制一 不支持多服务同时调试

可以看到配置项是指定了调试的可热更服务名和对应的启动下标

1
2
3
4
   breakpoint_debug_module_name = "debug_test_m",   --调试的可热更服务名
breakpoint_debug_module_index = 2, --启动下标
breakpoint_debug_host = "127.0.0.1", --vscode监听的IP
breakpoint_debug_port = 8818, --vscode监听的端口

限制二 正式服别用

调试开启会影响性能,不配置相关配置就不会使用了

非可热更服务如何调试

自行在服务中加载luaPanda即可。
require("skynet-fly.LuaPanda").start('127.0.0.1', 8818);


断点调式的支持
https://huahua132.github.io/2024/08/03/skynet_fly_word/word_3/P_breakpointdebug/
作者
huahua132
发布于
2024年8月3日
许可协议