又成功捕獲一個已經成精的BUG

最近上架的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的變化事務了。。。),但是最終沒有事務的提交。也就導致后面所有對圖層的操作,系統都認為是一個未完成的事務,也就仿佛整個屏幕被“凍結”了一般。。。。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。