最近在用百度地圖SDK做定位功能,遇到了一個會crash的bug。經過長時間的調試,終于確定并解決了問題。以下是這次問題總結的一些比較重要的東西。
- 遇到了EXC_BREAKPOINT(code = 1,subcode = ...)這樣的崩潰斷點,首先應該啟用僵尸模式查找具體崩潰原因。
- 當僵尸模式查找不到的時候,應該可以確定是靜態庫內部出現的崩潰。這時候就要仔細查看自己的代碼,找到使用第三方庫不當的地方。(最好在剛開始使用的時候多讀官方文檔和官方demo,避免出現這種錯誤。)
- 由于鷹眼的開始和停止上傳位置的方法都是在新開的線程中執行的,我這里就是遇到了兩個方法同時執行,導致開始方法的內部調用了已經被停止方法釋放的對象。所以出現了崩潰。
- 發生崩潰的操作時,應該是只調用開始上傳的方法的。所以就通過打斷點的方式找到調用了stop的代碼。
- 然后發現是在監控程序進入后臺的方法中調用的。這時候問題又來了:這個方法是通過通知中心監控home鍵掛起程序時調用的,為什么每次進入界面都會調用這個方法呢?
- 最后確定,是在詢問定位權限的時候,系統也發送了一個程序掛起的通知。