LuaPanda
LuaPanda copied to clipboard
关于 cocos2dx 下无法 attach 的问题
环境:mac os 10.15 调试器版本: 3.1.0
最近有同学反馈cocos2dx下可以调试,但无法attach连接。我们测试了一下,发现在attach时LuaPanda.lua 文件 reConnect() 函数中
local sockSuccess, status = sock:connect(connectHost, connectPort);
一直是连接失败,提示是参数错误。
但事实上传入的参数是正确的,不知道是否和cocos2dx以及其中集成的luasocket有关,如果有了解的同学欢迎讨论。
具体的复现方法是:
- 打开日志 LuaPanda.lua 文件头部, consoleLogLevel = 2 修改为 consoleLogLevel = 0 在printToConsole(), 打印到console的日志实际调用的是print方法,可以改为用户自定义函数。
- 修改hook步长(可选) LuaPanda.lua 文件 changeHookState() 中
if hookLib then hookLib.lua_set_hookstate(hookState.DISCONNECT_HOOK); else debug.sethook(this.debug_hook, "r", 1000000); end
其中的 1000000 是默认attach步长。因为纯lua环境没有定时器,所以表示每 1000000 次调用后发起以此attach连接。这个步长过短的话, 会造成等待attach时用户进程卡顿,过长又会造成长时间不发起attach。根据用户lua代码执行的频度可以尝试修改。 3. 关注reconnect attach的实现是在LuaPanda.lua的reConnect() 函数,可以打一些日志,关注这一行的执行结果
local sockSuccess, status = sock:connect(connectHost, connectPort);
如果connect成功,应该就可以进行attach (我的测试结果是cococs2dx只有启动时可以连接成功,之后一直提示参数错误失败,造成无法attach)
我这边情况是项目在安卓和windows下都没有问题,在iOS下会有这个问题,Mac版本因为项目跑不起来所以没有试。
今天试着调了调参数,发现有一定几率可以attach。后来我把重连间隔和timeout都调的比较大,发现了问题。每次出现Invalid argument之前,都会出现一次connection refused,只要出现了这个,在iOS下,之后就会一直报Invalid argument了。而同样的步骤在windows下复现,报的是timeout,没有出现connection refused。
因此判断是connection refused的出现,导致不能重连了。
尝试在返回connection refused之后,调用reGetSock(),问题解决。我提交了PR,供参考。
感谢PR ,我最近会按这个思路在各平台测试一下,有结果了在这里反馈~