crash 求助 无法定位具体位置
上报的位置行
glDrawElements(GL_TRIANGLES, (GLsizei)numberOfQuads*6, GL_UNSIGNED_SHORT, (GLvoid*) (start*6*sizeof(_indices[0])));`
crash 求助 无法定位具体位置
上报的位置行
glDrawElements(GL_TRIANGLES, (GLsizei)numberOfQuads*6, GL_UNSIGNED_SHORT, (GLvoid*) (start*6*sizeof(_indices[0])));`
memcpy报错不是应该先查数组越界吗?你确定不是最后那个参数的问题?sizeof(_indices[0])你怎么确定_indices顶点下标一定有至少一个元素呢,直接sizeof(类型)试试?
是通过bugly收集的crash信息
看报错应该是_indices 为null 导致引用无效内存崩溃
但本地无法重现此问题,无法定位到具体是哪里出了问题
这个crash 每天大概会影响2-5%的设备
怎么就无法定位了呢。。。 你看看CCTextureAtlas.cpp的683行看看呗,说不定是什么texture atlas设置为了undefined之类的错误
往上找,看自己写的代码,哪一行抛出来的。
一般是自己代码的问题
一般都不是引擎的bug
这类宕机,其实很难进行问题回溯,因为可能并不是这段代码引起的。楼主这个问题,我遇到过,我提供一下我的解决思路。
GL产生的错误大多是因为状态出错的原因,就是GL状态未就绪,就调用GL接口,典型的场景就是调用Android第三方的SDK(比如微信),然后执行回调,虽然回调在runOnGLThread中执行,但是经过我测试,这时候GL状态仍然可能未就绪,如果回调中有执行代码并且操作了Label等可能要使用GL的api,就会引起宕机行为,准确的是未知行为。
要解决这个问题,就需要确保所有回调在c++底层中,要在cocos thread线程中执行。大致代码:
Director::getInstance()->getScheduler()->performFunctionInCocosThread([ref, argstrs]() {
// 执行 lua 回调或 c++回调
});