当前位置:网站首页>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 导致崩溃的问题及解决方案就结束了
欢迎有问题的同学留言讨论
边栏推荐
猜你喜欢
随机推荐
数据库系统原理与应用教程(069)—— MySQL 练习题:操作题 95-100(十三):分组查询与聚合函数的使用
C陷阱与缺陷 第6章 预处理器 6.4 宏并不是类型定义
数据库系统原理与应用教程(063)—— MySQL 练习题:操作题 39-50(七):SELECT 基本语法联系
2022年杭电多校第2场 1001 Static Query on Tree(树链剖分+哈希表差分
升级 MDK 5.37 后的问题处理: AC6编译选项, printf, 重启失效等
千亿级、大规模:腾讯超大 Apache Pulsar 集群性能调优实践
今年这情况。。真心推荐专科的工程师升个本!
沃尔沃中国的年中总结,在“安全感”中寻找未来
测试.net文字转语音模块System.Speech
LayaBox---TypeScript---枚举
ESP8266-Arduino编程实例-BMP180气压温度传感器驱动
数据库系统原理与应用教程(065)—— MySQL 练习题:操作题 62-70(九):分组查询与子查询
宝塔搭建PHP自适应懒人网址导航源码实测
Web结题报告
什么是工业射线照相设备?
Leetcode数据库系列题解合集(持续更新)
微博广告分布式配置中心的构建与实践(有彩蛋)
un7.30:linux——如何在docker容器中安装MySQL?
使用postman调接口报Content type ‘text/plain;charset=UTF-8‘ not supported
js中的基础知识点 —— BOM









