iOS SIGABRT的debug方法

iOS SIGABRT的debug方法

遇到的問題

最近在開發一個原型APP的時候,主線程SIGABRT後,crash堆棧信息非常有限,顯示只crash在主線程,但是沒有調用鏈路,所以無法定位到問題發生在哪裏。

crash的堆棧信息如下圖所示:
Crash堆棧
展示堆棧詳細信息之後,錯誤的信息量依然非常低。
Crash詳細堆棧信息
報錯信息爲一個UIButton被傳了一個無法識別的方法,具體什麼錯誤與本文無關。

調試方法

需要把XCode的調試能力完全用起來,這個時候就需要使用XCode的Exception Breakpoint功能。這樣XCode會在觸發異常之前自動暫停,幫助定位到crash觸發原因。

設置方法非常簡單,在Breakpoint Navigation欄中,點擊下角的+,選擇Exception Breakpoint

添加Exception Breakpoint
Exception選擇All,抓全局的所有Exception可能性
設置全局Crash捕捉
然後再次運行程序,XCode自動定位到Crash程序位置,正常解bug,程序正常工作,問題解除。

致謝

Exception Breakpoint是XCode提供的傳統功能,非常強大,但是藏的稍有點深,很多人找不到,導致花費大量時間debug程序,才能找到錯誤。可以想象,如果程序規模非常大的情況下,找到一個無堆棧的crash點的難度有多大。好些年前iOS Tutorial Team的 Matthijs Hollemans,寫過一篇文章,如何在crash的時候找原因,寫的非常好,雖然過去很多年了,但仍然值得讀,可以參考:My App Crashed, Now What?

工具的學習依然是提高效率、降低出錯最重要的環節,由此可以節省出大量的時間。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章