skynetda
skynetda copied to clipboard
建议: 不要侵入式修改 skynet
skynetda , 这个项目很棒。不过提个建议。 colinsusie/skynet 这样侵入修改,如果有不少用户使用后。其他有用户发现 colinsusie/skynet 不能随时跟上 skynet 的 master 分支。这样到时候,就会很尴尬。如果必须用上 skynet 新特性,那就只能选择放弃 skynetda 这个工具了。
你可以对比一下colinsusie/skynet,其实并没有修改skynet的代码,只是在外部增加了3个Lua服务,唯一增加的就是在skynet.lua的注入debug框架。
你也可以这样做:把colinsusie/skynet变化的部分合并到你们的工程中去。
是啊。 但你这样改,大家不知道要不要 clone 你这个项目。如果clone , 如果你没有及时更新。 如果需要用到最新的特性,就没法用。如果不clone, 合并工程,每一次你这边修改,合并都需要手动进行,效率也很低啊。
还有,我简单看了一下,你重载了 skynet.start 这个函数。 其实你完全可以在 preload 里进行替换
你可以参考下,我的项目目录 https://github.com/samuelyao314/terminator
在preload增加预加载脚本确实可以在重载skynet.start,但是没有办法重载skynet.lua里面的局部函数,你看看skynet.lua的注入代码:
-- vscode debug
local vscdebug = require "skynet.vscdebug"
vscdebug.init(skynet, {
suspend = suspend,
resume = coroutine_resume,
})
它需要suspend和coroutine_resume这两个局部函数,所以只能像skynet自带的debug.lua那样,注入到skynet.lua。
看一下skynet.lua就明白了。
我预计skynet应该不会有大的修改了,像这两天的小BUG提交,我都有merge过来的。 另外这个调试功能需求是比较明确的,只会修改小BUG,所以。。。
@colinsusie 我的目录结构 调试无响应 但是 直接在 skynet 目录下是可以的 请问两者会有区别?
-- framework
-- skynet
{
"version": "0.2.0",
"configurations": [
{
"name": "skynet_debugger",
"type": "lua",
"request": "launch",
"program": "${workspaceFolder}/framework/skynet",
"config": "./examples/config_vsc"
}
]
}
你试试将下面这两个换成绝对路径看看行不行:
"program": "${workspaceFolder}/framework/skynet", "config": "./examples/config_vsc"
奇怪了,我按你的路径配置是可以启动调试的 "program": "${workspaceFolder}/framework/skynet", "config": "./examples/config_vsc"
请问你用VSCode打开的根目录是什么,我的根目录是: /home/colin/myproj
目录结构是:
myproj/
framework/
skynet/
test.lua
不能调试很大可能是${workspaceFolder}这个指向不对。
启动调试 debug.log 显示
workdir: /Users/cloudfreexiao/Documents/Github/zeus/framework/skynet
尝试用 命令行运行
./framework/skynet/skynet ./framework/skynet/examples/config_vsc
错误日志
[skynet config]:2: os.getenv() failed: vscdbg_open
我没有把 cjson 集成进来所以改了下 配置具体见 https://github.com/cloudfreexiao/skynet/commit/8d89318c86483bc50f7c608751e1c89d78c044db
-- framework
-- skynet
-- luaclib --这里存cjson
root = "./"
thread = 4
logger = "vscdebuglog"
logservice = "snlua"
logpath = "."
harbor = 0
start = "testvscdebug" -- main script
bootstrap = "snlua bootstrap" -- The service for bootstrap
luaservice = root.."service/?.lua;"..root.."test/?.lua;"..root.."examples/?.lua;"..root.."test/?/init.lua"
lualoader = root .. "lualib/loader.lua"
lua_path = root.."lualib/?.lua;"..root.."lualib/?/init.lua"
lua_cpath = root.."../luaclib/?.lua;" .. root .. "luaclib/?.so"
snax = root.."examples/?.lua;"..root.."test/?.lua"
cpath = root.."cservice/?.so"
vscdbg_open = "$vscdbg_open"
vscdbg_bps = [=[$vscdbg_bps]=]
不知道 是否有影响
config_vsc 这份配置是专门用在VSCode调试用的,不能用命令行跑config_vsc,因为这两个变量:
vscdbg_open = "$vscdbg_open"
vscdbg_bps = [=[$vscdbg_bps]=]
是vscode传给skynet 的,你用命令行就没有这两个变量,所以会启动失败。你必须用vscode的F5启动skynet。
调试和正式环境应该使用两份config,不要共用一份。正式环境中不要有vscdbg_open
, vscdbg_open
,logger
这些,具体参考skynet其他的config写法。
或者你直接fork我这边的看看能不能F5调试,再看看和官方的skynet的有哪些差异?
我试试了下 你的仓库 是可以的 排查了下 是我的问题 sorry
lua_cpath = root.."../luaclib/?.lua;" .. root .. "luaclib/?.so" 应该是 .so
你的系统里有cjson是吧?有可能是cjson的版本问题。