当前位置:网站首页>cocos creater 热更重启导致崩溃
cocos creater 热更重启导致崩溃
2022-07-30 17:57:00 【丶党玲儿】
cocos creater 热更重启导致崩溃
知识点
- jsb_websocket_server.cpp 游戏中用到的 socket
- inspector_socket_server.cc V8引擎中 用于远程调式native的 socket server
需求背景
- 游戏引擎:cocos creater 2.4.3
- 游戏热更完调用 cc.game.restart() 导致崩溃
- 游戏一发热更新 线上崩溃率指标直线上升
崩溃现场
偶然得到一个可以必现的机型
崩溃堆栈如下:

崩溃分析
根据崩溃堆栈可以看到 是调用jsb_websocket_server
断点结果可以看到崩溃的入口 是回调里的方法 如下图

所以 推测 cc.game.restart() 以后, websocket 没释放干净。 导致 重启以后 野指针收到回调, 造成的崩溃
由于我们没用到cocos creater的websocket 所以决定去掉websocket
第一步解决方案: 直接把 jsb_websocket_server 注册的回调函数都注释,进入游戏 没有崩溃
第二步解决方案:翻看源码得知 是否开启socket 是由宏控制。 如下图

so 我们只需要添加宏定义,把 USE_SOCKET 改成0 就好了 如下图

扩展思考
我们项目没用到 websocket 所以直接把 websocket 注释掉了。 由于 崩溃是websocket_server, 理论上 如果需要用到websocket的话 把 USE_WEBSOCKET_SERVER设置成0 也可以 具体为什么崩溃 还没来记得查。 有想法的可以留言交流
把websocket 去掉以后也可以远程调试native,所以又找了一下远程调试的原理。 代码如下 :

从上图得知: 远程调试native的功能是用的V8引擎里的 socket_setver 。导致崩溃的是游戏引擎里的websocket
断点运行回调里也可以看到。 当访问调试链接时 可以进入断点,具体可自行尝试
至此 热更 game restart 导致崩溃的问题及解决方案就结束了
欢迎有问题的同学留言讨论
边栏推荐
猜你喜欢
随机推荐
This year..I sincerely recommend the professional engineer to upgrade to the book!
Web 3.0入门教程
【网络工程】A、B、C、D、E类IP地址划分依据和特殊的IP地址
Arranger software FL Studio Chinese version installation tutorial and switching language tutorial
【HarmonyOS】【FAQ】鸿蒙问题合集4
多年以后「PageHelper」又深深的给我上了一课
如何让 JOIN 跑得更快?
习题:变量、常量和基本数据类型
js中的基础知识点 —— BOM
[OC study notes] attribute keyword
千亿级、大规模:腾讯超大 Apache Pulsar 集群性能调优实践
What is NDT equipment?
沃尔沃中国的年中总结,在“安全感”中寻找未来
公司部门来了个00后测试卷王之王,老油条表示真干不过,已经...
SQL行列转换
宽带射频放大器OA4SMM4(1)
weiit新零售小程序如何探索数字化门店的破局之路
一个 15 年 SAP ABAP 开发人员分享的 SAPGUI 一些个性化设置和实用小技巧
原生js系列
LayaBox---TypeScript---函数









