又成功捕獲一個已經(jīng)成精的BUG

最近上架的APP [ 6F ] , ?為了優(yōu)化性能,修改了上百處代碼。突然,在某種情況下,界面全部卡死,沒有任何異常拋出, 也沒有任何死鎖或死循環(huán),最奇怪的是主線程run loop還正常運行,但是,整個界面沒有任何反應。

這種無任何出錯或異常提示的bug真是要了老命啊?。。。。?!

經(jīng)過一天一夜的艱苦抗戰(zhàn),分析每一個變量數(shù)據(jù),疑神疑鬼的做了幾十種可能性猜測,可是每一步斷點調(diào)試都是沒有任何問題。也許你會說,那一直調(diào)試到出現(xiàn)卡住的地方啊,可是,關(guān)鍵是調(diào)試的代碼沒有任何地方出現(xiàn)卡住的現(xiàn)象,一路通暢,就是界面仿佛凍結(jié)住一般,并且!還能響應觸摸事件。

甚至恢復了歷史代碼,做代碼差異化比較( 這種方法真是狗急跳墻的方法,這么多年經(jīng)驗告訴我,這種方法找到bug的可能性微乎其微)。

在極其深度的一行行代碼研究后( 幾乎涉及到2000多行代碼,每一行都仔細分析),最終?。。≌业揭粋€fat finger的錯誤:

這里有一個自己寫的宏:

_forbid_animation_begin

它主要目的是取消iOS對圖層設置顏色,線條等屬性時系統(tǒng)自動產(chǎn)生的動畫,提高效率。

這個宏我是這樣寫的:


它是系統(tǒng)定義的一個事務,我自己寫的這個宏必須要成對出現(xiàn)

_forbid_animation_begin

_forbid_animation_end

而我恰恰粗心忘記了?_forbid_animation_end

也就意味著代碼中出現(xiàn)了系統(tǒng)的[CATransaction begin] ( 也就是告訴系統(tǒng),現(xiàn)在開始做CALayer的變化事務了。。。),但是最終沒有事務的提交。也就導致后面所有對圖層的操作,系統(tǒng)都認為是一個未完成的事務,也就仿佛整個屏幕被“凍結(jié)”了一般。。。。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容