美文网首页iOS DevelopmentiOS Developer程序员
又成功捕获一个已经成精的BUG

又成功捕获一个已经成精的BUG

作者: xu54 | 来源:发表于2018-01-10 00:45 被阅读0次

    最近上架的APP [ 6F ] ,  为了优化性能,修改了上百处代码。突然,在某种情况下,界面全部卡死,没有任何异常抛出, 也没有任何死锁或死循环,最奇怪的是主线程run loop还正常运行,但是,整个界面没有任何反应。

    这种无任何出错或异常提示的bug真是要了老命啊!!!!!!

    经过一天一夜的艰苦抗战,分析每一个变量数据,疑神疑鬼的做了几十种可能性猜测,可是每一步断点调试都是没有任何问题。也许你会说,那一直调试到出现卡住的地方啊,可是,关键是调试的代码没有任何地方出现卡住的现象,一路通畅,就是界面仿佛冻结住一般,并且!还能响应触摸事件。

    甚至恢复了历史代码,做代码差异化比较( 这种方法真是狗急跳墙的方法,这么多年经验告诉我,这种方法找到bug的可能性微乎其微)。

    在极其深度的一行行代码研究后( 几乎涉及到2000多行代码,每一行都仔细分析),最终!!!找到一个fat finger的错误:

    这里有一个自己写的宏:

    _forbid_animation_begin

    它主要目的是取消iOS对图层设置颜色,线条等属性时系统自动产生的动画,提高效率。

    这个宏我是这样写的:

    它是系统定义的一个事务,我自己写的这个宏必须要成对出现

    _forbid_animation_begin

    _forbid_animation_end

    而我恰恰粗心忘记了 _forbid_animation_end

    也就意味着代码中出现了系统的[CATransaction begin] ( 也就是告诉系统,现在开始做CALayer的变化事务了。。。),但是最终没有事务的提交。也就导致后面所有对图层的操作,系统都认为是一个未完成的事务,也就仿佛整个屏幕被“冻结”了一般。。。。

    相关文章

      网友评论

        本文标题:又成功捕获一个已经成精的BUG

        本文链接:https://www.haomeiwen.com/subject/rbjnnxtx.html