Ios平台游戏异常闪退问题之get_numerous_trampoline排查记录

案件回放:

        打开游戏,进行上线前的检查,在检测功能的时候,莫名其妙的就崩溃,闪退了。。。。。。立即重新拉起游戏,准备简单的重现之后找研发来修复,发现不能必现了。这个时候去提单也太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.

打完收工~~~

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。