关于1.8.2运行IOS版APP的问题

creator:1.8.2
xcode:9.2
打开APP后,闪退。错误如下:


涉及脚本:jsb_cocos2dx_manual.cpp
涉及函数:onGLProgramStateDestroy
以上是IOS设备上出的问题。

安卓环境下完全没问题。
AS版本3.0

由于报错没有更多的堆栈信息,所以无从下手,求大神解惑!

提供点线索也好。。。。

是不是,新引擎对全局变量的控制更加严格了?
game.restart()的时候,销毁所有全局变量。由于某些变量还在引用,所以就断言了?
求线索啊

嗯,确实有可能是 jsb 重启过程中引起的 bug,帮你反馈一下~

我是这样改的

触发 assert 应该是可以在xcode中看到堆栈信息的。

你是否有自定义 shader ?
examplecase 里面的 restart 按钮重启游戏,会出现你说的问题么?

目测你是集成到自己的游戏大厅app中,是否有哪些操作是不太一样的。

能否提供一个基于 helloworld 的复现demo出来?

1.没有堆栈,到这里直接断言闪退。
2.我们的大厅和游戏其实是平级关系,是个伪大厅。
3.有自己定义的share脚本SpriteGray.zip (1.0 KB)

能否基于你目前这个shader,整理一个复现demo出来么?这样我们才好分析具体是什么原因。

我也是闪退了。。。

还是1.8.0比较稳定

我吧我们的游戏简化了下,删除了很多脚本。未再出现崩溃。
故而可排除底层bug,所以我想问下,在客户端JS代码编写过程中,有哪些情况会导致资源释放的时候断言。
例如:滥用全局变量?还是什么

onGLProgramStateDestroy

static void onGLProgramStateDestroy(GLProgramStateCache* cache, GLProgramState* state)
{
    se::AutoHandleScope hs;
    // NOTE: 'state' argument is attached to global object, therefore we need to detach it from global object.
    se::Object* global = se::ScriptEngine::getInstance()->getGlobalObject();
    se::Value val;
    bool fromCache = false;
    native_ptr_to_seval<GLProgramState>(state, __jsb_cocos2d_GLProgramState_class, &val, &fromCache);
    if (fromCache && val.isObject())
    {
        global->detachObject(val.toObject());
    }
    else
    {
        assert(false);
    }
}

这边抛异常的作用是,确保 GLProgramState 的 native js bindings 对象都是之前创建好的。如果有一个 GLProgramState 的c++对象需要destroy,而这时候我们发现它没有对应的 JS 对象(native_ptr_to_seval 返回 fromCache 为 false的情况下),那么就属于异常情况了,需要检查代码,看看哪里的问题。当然也说不准是引擎里面的状态控制哪里有问题。所以我这里还是需要有个复现方式,才好查。

由于目前项目比较紧,我没有太多的时间去查出这部分问题代码。后续等我空了后我会跟进的。谢谢大佬了!