標籤:
1、Unable to run app in Simulator
An error was encountered while running (Domain = FBSOpenApplicationErrorDomain, Code = 4)
出現上述問題的時候:
iOS Simulator -> Reset Contents and Settings... -> Reset
即可恢複正常。
1.Enable NSZombie Objects(開啟殭屍對象)
Enable NSZombie Objects可能是整個Xcode開發環境中最有用的調試技巧。這個技巧非常非常容易追蹤到重複釋放的問題。該技巧會以非常簡潔的方式列印指出重複釋放的類和該類的記憶體位址。
怎麼開啟殭屍對象呢?首先開啟“Edit Scheme”(或者通過熱鍵?<),然後選擇Diagnostics選項卡,勾選Enable NSZombie Objects選項。
現在我們可以關掉ARC來測試重複釋放的問題、異常和更容易產生的Crashs,但是即使開啟ARC,重複釋放和與記憶體相關的Crashs也經常發生。現在假設我們犯了一些錯誤導致了重複釋放的發生來觀察將要發生什麼。
UIView* view = [[[UIView alloc] init] autorelease];
//...
//do something with view...clearly forgetting that it has been autoreleased.
//
[view release];
現在運行這段代碼會發生重複釋放的問題,程式將崩潰在主函數,會像下面這樣:
Enable NSZombie Objects會讓調試器看起來像這樣:
這個例子看起來作用非常小,但是對於一個大工程通過Enable NSZombie Objects列印的資訊是非常有用的。
2.對於所有異常添加Global BreakPoint(全域斷點)
當你的應用異常或者崩潰的時候Xcode喜歡做的一件事情是直接跳到主函數,就像第一個調試技巧中用到的那個例子一樣。如果異常或者崩潰能夠停留在異常或者崩潰發生的地方那該是多好呀。幸運的是有一個方法可以做到。Xcode有一個漂亮的功能叫做異常斷點,允許我們在異常發生的時候在異常發生的地方放一個斷點。你可以指定具體的異常也可以指定所有的異常。
怎樣開啟異常斷點呢?工程切換到異常瀏覽視窗,點擊下方左側的“Add Breakpoint”按鈕,然後選擇“Add Exception Breakpoint”確保可以捕獲所有異常。
現在異常發生時調試器不會直接跳轉到主函數了,而是停留在了異常發生的地方。
這個斷點給了我們一個調試異常非常好的開始的點,不用我們再去遍曆代買去找異常發生的地方了。
3.Static Analyzer(靜態分析)
Static Analyzer是一個非常好的工具去發現編譯器警告不會提示的問題和一些個人的內錯泄露和死儲存(不會用到的賦了值的變數)錯誤。這個方法可能大大的提高記憶體使用量和效能,以及提升應用的整體穩定性和代碼品質。
怎麼開啟Static Analyzer?開啟Xcide的“Product”菜單,選擇Analyzer選項(或者使用熱鍵? shift B)。正像你看到的下面的,Static Analyzer會捕獲任何應用內的可能的問題然後以藍色的警告展示出來。
我們也可以設定我們的應用在我們編譯應用的時候自動開啟Static Analyzer,開啟項目project檔案,設定“Run Static Analyzer”為YES,如:
4.Condational Breakpoints(條件斷點)
最後一個調試技巧條件斷點,這隻是普通的斷點,當變數滿足一定條件時程式停止。這個調試技巧在當你想要捕獲一個迴圈中的變數的特定值或者一些不常發生的情況時是非常有用的,而不用你每次迭代都停止來查看。
怎樣開啟條件變數?只不過是添加一個普通斷點,然後右鍵點擊斷點選擇“Edit Breakpoint”,這時就開啟了一個斷點編輯器,你可以在這裡設定斷點條件(以及一些其他的斷點設定),然後選擇“Done”,這個調試技巧非常簡單吧。
5.unrecognized selector send to instancd 快速定位
在Debug菜單中Breakpoints->Create Symbolic Breakpoint
在Symbolic中填寫如下方法簽名
-[NSObject(NSObject) doesNotRecognizeSelector:]
設定完成後再遇到類似的錯誤就會定位到具體的代碼。
ios常見bug