cocos creater 热更重启导致崩溃

cocos creater 热更重启导致崩溃

知识点

  1. jsb_websocket_server.cpp 游戏中用到的 socket
  2. inspector_socket_server.cc V8引擎中 用于远程调式native的 socket server

需求背景

  1. 游戏引擎:cocos creater 2.4.3
  2. 游戏热更完调用 cc.game.restart() 导致崩溃
  3. 游戏一发热更新 线上崩溃率指标直线上升

崩溃现场

偶然得到一个可以必现的机型

崩溃堆栈如下:

请添加图片描述

崩溃分析

  1. 根据崩溃堆栈可以看到 是调用jsb_websocket_server

  2. 断点结果可以看到崩溃的入口 是回调里的方法 如下图

  3. 请添加图片描述

  4. 所以 推测 cc.game.restart() 以后, websocket 没释放干净。 导致 重启以后 野指针收到回调, 造成的崩溃

  5. 由于我们没用到cocos creater的websocket 所以决定去掉websocket

  6. 第一步解决方案: 直接把 jsb_websocket_server 注册的回调函数都注释,进入游戏 没有崩溃

  7. 第二步解决方案:翻看源码得知 是否开启socket 是由宏控制。 如下图

  8. 请添加图片描述

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

  10. 请添加图片描述

扩展思考

  1. 我们项目没用到 websocket 所以直接把 websocket 注释掉了。 由于 崩溃是websocket_server, 理论上 如果需要用到websocket的话 把 USE_WEBSOCKET_SERVER设置成0 也可以 具体为什么崩溃 还没来记得查。 有想法的可以留言交流

  2. 把websocket 去掉以后也可以远程调试native,所以又找了一下远程调试的原理。 代码如下 :

  3. 请添加图片描述

  4. 从上图得知: 远程调试native的功能是用的V8引擎里的 socket_setver 。导致崩溃的是游戏引擎里的websocket

  5. 断点运行回调里也可以看到。 当访问调试链接时 可以进入断点,具体可自行尝试

至此 热更 game restart 导致崩溃的问题及解决方案就结束了

欢迎有问题的同学留言讨论

回答: 在Cocos Creator中,可以使用cc.Graphics组件来进行绘制。通过调用该组件的方法,可以在画布中创建线条。例如,可以使用moveTo方法指定起始点,然后使用lineTo方法创建从起始点到指定点的线条。\[1\]另外,Cocos Creator中的物体外观是通过材质来描述的。材质包含了着色器的数据集,可以通过可视化调整来实现光照效果、光反射等效果。\[2\]如果想要获取自己的节点树中的Graphics组件,可以按照节点树的层级关系进行获取。例如,可以通过getChildByName方法获取到对应的节点,然后使用getComponent方法获取到Graphics组件。\[3\] #### 引用[.reference_title] - *1* *3* [CocosCreator中的Graphics绘制组件](https://blog.csdn.net/qq_42597694/article/details/120651974)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [CocosCreater 教程(中)](https://blog.csdn.net/qq_35624156/article/details/127943958)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值