系列 iOS開發 如何快速定位bug並解決

2021-09-11 17:12:14 字數 2445 閱讀 8168

#系列:ios開發-快速定位bug並解決

本來沒有打算針對這個開文的,

昨天工作忙完,閒來無事的時候,逛逛論壇,貼吧啥的,偶然間就發現了有人發bug帖. www.jianshu.com/p/b51ead39c…

上面說的神乎其神呢... 大家可以去看看.

於是編譯執行專案 按照他說的,確實出現了這個小而且偏的bug復現

於是想要解決bug

首先不管理記憶體什麼的問題,懷疑是不是vc沒有釋放? 於是在vc的dealloc中新增列印

-(void)dealloc

複製**

執行.返現沒有任何問題,vc能夠正常釋放,但是textfield確實沒有被釋放.排除vc引用

編譯執行,發現bug已經沒有復現了,專案執行正常,vc能夠釋放,textfield也能夠釋放.所以下定解決,出現bug的原因就是這個屬性了.

編譯執行,bug復現,說明該屬性在ios11下確實會強引用控制項,導致不能釋放,

**完畢之後,找到合適的地方寫需要的**即可

-(bool)textfieldshouldbeginediting:(uitextfield *)textfield else 

return yes;

}複製**

再次編譯執行, bug已經不見了釋放問題得到解決.

- (ibaction)back:(id)sender 

複製**

所以整個bug修復的過程就是取消storyboard的securetextentry屬性,改為手動新增,防止強引用,改為到**裡面設定,讓系統自動幫我們打破強引用即可.

bug修復demo github.com/spicyshrimp…

其實這是乙個很簡單的bug修復問題 所以這個問題其實引出了我們作為ios開發如何能快速定位bug的問題 在我們開發的時候,我們會經常出現各種莫名的bug,而自己卻不能夠定位,找不到思路,其實對於bug定位這個是乙個技巧和經驗的問題

大家都知道的方式有,打斷點,逐行判斷,列印log,判斷是否正確輸出... 經驗在豐富一點的會使用控制台來po一些屬性的值... 這些基本上每乙個開發者都天天在用.

但是並不是這些就能完全的解決bug了 解決bug不是一味的出現bug,並且明確了bug發生的地方才能解決,很多bug是系統本事遺留導致 比如,我上篇博文說的檔案索引在xcode9中的問題導致的bug就和**完全無關 比如,上面提到的bug,小而偏,完全無法定位bug出現在哪一行 比如,我昨晚幫網友解決的乙個響應鏈關係的bug,檢視層次都是正確的,但是就是沒有響應事件,網友卻認為是子控制項本身的bug導致,卻沒有換個思路,想到關於圖層結構,是否可以響應事件,等基本常見bug,(最終問題也是出在的這裡,圖層window的問題,這裡不贅述了)

所以這裡我簡單的總結一些解決bug的經驗,分享給大家,希望大家都沒有bug,

多列印log----log能夠最簡單直接的反應很多東西,比如屬性的值,比如物件的類是否正確.....

多新增關鍵斷點----類似於log,我們每乙個有問題的bug,大部分都是有復現路徑的,我們需要逐步分析這個復現路徑,就需要對每乙個關鍵點新增斷點,逐一排除即可修復

學會使用異常斷點等高階方式 當我們無法明確某些復現路徑的時候,我們可以通過異常斷點來破獲問題出現的地方

關於使用方法,大家可以自行網上學習一下,即可

學會使用po命令---- 新增斷點,出現異常或者中斷之後,對於沒有log的資訊,我們可以使用po命令來獲取.

學會使用其他工具,工具很多,這裡不做介紹,比如instrument等.這些工具的掌握對於解決bug是很有幫助的

使用crash日誌---我們可以使用本地儲存crash日誌,也可以使用一些三方的bug收集sdk進行接入,比如bugly等,其可以在一定程度上定位到bug出錯的位置,幫助我們解決

分析bug出現關鍵因素,對於上述還是無法定位bug的,我們需要自行分析bug出現的關鍵因素,不要放過任何乙個細節,比如找不到某某方法,那就是要麼沒有引用檔案,要麼沒有新增到專案,要麼沒有實現方法,要麼編譯器沒有找到索引路徑等.再比如上面的bug問題,關鍵點就是乙個屬性導致,我們在定位bug初期就應該能夠想到,但是很多人卻會忽略它

使用一些不同的思路去打破bug路徑,這個是經驗的問題,很多bug,使用普通的思路無法解決,可能是系統私有化,可能是時間拿不到,可能是其他一些因素無法控制,此時就需要經驗了,如何能夠改變思維,改變固有想法去繞過bug,也是需要掌握的,大家可以參考我的另一篇部落格 ------( ios11 導航欄按鈕位置問題的解決 blog.csdn.net/spicyshrimp…) 對應很多因為系統限制的原因,無法使用正常思維解決的,我們就要另闢蹊徑,至於如何做,這裡只能說,熟能生巧

對於每乙個ios或者xcode的公升級(其他開發工具或者開發環境也一樣),如果可以,盡早的去適應和學習新的不同點,及早的思考某些api的改變會對我們的開發造成什麼影響,做到提早預防

其實,能否對bug的快速定位,也間接反映了你的能力水平 希望大家在開發的時候永遠沒有bug....

系列 iOS開發 如何快速定位bug並解決

本來沒有打算針對這個開文的,昨天工作忙完,閒來無事的時候,逛逛論壇,貼吧啥的,偶然間就發現了有人發bug帖.上面說的神乎其神呢 大家可以去看看.於是編譯執行專案 按照他說的,確實出現了這個小而且偏的bug復現 於是想要解決bug 首先不管理記憶體什麼的問題,懷疑是不是vc沒有釋放?於是在vc的dea...

iOS快速定位問題

作為開發人員在除錯程式的時候,我們很想馬上知道錯誤的 在哪一行,而不想大概設定乙個斷點,逐行除錯發現最終是哪一行 出問題導致程式崩潰。可以使用下面這個辦法快速定位問題 1.unrecognized selector send to instancd 快速定位 在debug選單中breakpoints...

12 如何通過fiddler定位前後端bug?

如何通過fiddler定位前後端bug?第一種情況 fiddler 在沒有設定過過濾器的情況下面沒有抓到請求資訊,可能是前端頁面元素沒有繫結事件,也有可能是前端發生了js 錯誤,這就是前端的bug 第二種情況 若抓取到的請求返回的結果錯誤,我們要確認一下,是否是前端傳輸的資料是錯的,是的話就是前端的...