案件回放:
打开游戏,进行上线前的检查,在检测功能的时候,莫名其妙的就崩溃,闪退了。。。。。。立即重新拉起游戏,准备简单的重现之后找研发来修复,发现不能必现了。这个时候去提单也太Low了~~~找到研发问了下,本身的应用是否有做crash异常上报。(目前这一块的Open Source框架比较多,我就不在此累赘复述了)直接查看上一次的crash异常上报信息,结合symbol 信息还原堆栈信息。
案件侦测:
查看还原后的堆栈信息,有一处信息为:
发现最终导致该起“凶案”的罪犯应该是跟Mono本身有关系。而且从_g_log的调用来看,能够给予我们提供线索的应该是get_numerous_trampoline这个函数。
查看Mono源码对应的该函数原型
以上的红色标记信息显示:
get_numerous_trampoline函数中对于异常,错误信息的处理error信息为:Ran out of trampolines of type
查看到该信息之后,直接可以去搜索对应的解决方案了
于是参考:
http://answers.unity3d.com/questions/64909/ran-out-of-trampolines-of-type-2-ios.html
在Unity上做了修改,本以为一切应该可以回归正常,,,不会出现杨过叫了小龙女回头的是陈XX的一种哀伤和心碎了,,,可是build完成后,发现,,,还是crash,查看堆栈还是,,,,jit,~~~而且还是这里的问题,,,老夫觉得有点愤怒了,,,难道说又陷入了深深的坑里了,,,你存在,bug深深的坑里,,,如何逃离,如何逃离~~~
最终结果和解决方案:
是这里的问题,也是这个原因,但是修改的不对。正确的是:
在Xcode里面(我这里是ios),选中对应的工程,然后
在项目option--iphone build处添加额外的参数-aot "ntrampolines=2048"
这个参数默认值为1024,试着增加这个值直到满足你的应用的需求(Ran out of trampolines of type 0 )Ran out of trampolines of type 1如果你使用了过多的泛型嵌套,如List<T>中还有List<T>成员,你可以同上通过添加额外的参数-aot "nrgctx-trampolines=2048" 来解决。蹦床类型1的默认值为1024.
Ran out of trampolines of type 2如果你界面操作频繁,你可以通过添加额外的参数-aot "nimt-trampolines=512" 来解决。这里的默认值为128.
打完收工~~~
Ios平台游戏异常闪退问题之get_numerous_trampoline排查记录
原文地址:http://blog.csdn.net/yzongyu/article/details/41847511