一个crash引发对版本管理备注重要性的思考

    在某个风和日丽的晚上,查看友盟后台时,发现有个app crash发生率特别高。情况如图所示

一个crash引发对版本管理备注重要性的思考

    SIGSEGV crash一般是引用对象给回收为空,测试了一番,重现了bug,当app进入后台时,app就会挂在GPUImage 某个方法上,这个问题以前没出现过,然后最近手机又更新到ios9,xcode老提示一些莫名奇妙的错误,所以自然会认为是ios9系统的问题,但是这么必现而且常现的问题一定要解决啊,至少也得try catch,有个友好的展示,而不是直接挂掉。测试了其他机子发现跟ios9没关。。。因为其他系统一样出问题。。。

    不过这样也说明是代码层面的问题,问题定位到更准确的范围了。因为挂在GPUImage上,所以一直设断点追踪GPUImage上的对象,没啥结果。。毕竟大牛写的代码,在论坛上问了人,其他人用GPUImage也没遇到这个问题。

    放下这个问题,去做其他东西冷静下,晚上蹲坑的时候,有条线索闪过脑袋,以前没有这个问题,现在出现了,会不会是某个版本更新加了什么东西导致的呢?

    立马回去查看项目更新列表,还好没个版本更新我都备注了更新的功能跟做出的修改,虽然只是写主要的更新功能,但也能在一定程度定位问题。更新列表如图所示:

    一个crash引发对版本管理备注重要性的思考

发现20151003之前的版本是木有这个bug的,但后面的版本都有,也就是这两个版本的更新出了问题代码,通过比较,发现加入了友盟统计的功能。然后去掉友盟统计就没有这个bug了。再去翻看友盟统计的文档,发现一句可疑又坑爹的话:

一个crash引发对版本管理备注重要性的思考

就是这个自动开启的后台统计功能,导致app 进入后台时挂掉,估计是友盟统计进入后台使用了跟GPUImage使用的某些对象一样,然后友盟使用完就释放了,导致GPUImage引用对象为空,最终app crash。

    一个bug引发的血案到此完结,得到的经验,

    1.开发文档要写全,友盟只写了对一般app没有影响,却不具体说明对具体某些类型会产生什么影响以及结果,这里对友盟提出不指名批评,负分滚粗。

    2.项目更新时的文案备注要尽量写清楚,无论大小功能代码的更新都应该尽量清晰,方便日后快速定位问题。

    3.多方面多维度思考问题,在一个方向转一段时间没有结果,就可以尝试休息下,换个状态跟心情再去思考问题,说不定思路就清晰了。

转载于:https://my.oschina.net/gdxz111/blog/518752