本文在源文的基礎上做整理:http://www.devdiv.com/home.php?mod=space&uid=50901&do=blog&id=50856
Xcode版本7.1 IOS版本9.1
公司之前開發(fā)的一個APP慨菱,在使用環(huán)境中IOS版本升級到9.0以后,某個操作會導致程序閃退窟蓝。
Xcode代碼中提示錯誤:
1
Thread 1: Program received signal:"EXC_BAD_ACCESS"
這樣的提示意味著對已經釋放的對象發(fā)送消息丧枪,或者對不能release的對象調用release瓦盛。
默認情況下Xcode并不能準確定位到具體哪行代碼引起的問題喉悴。
我們先對開發(fā)環(huán)境進行設置
先打開Debug的Console View界面,讓Xcode在調試的時候輸出更多的信息:菜單XCode > Preferences
再對環(huán)境變量進行設置:菜單Product > Scheme > Edit Scheme
設置好后調試程序禀晓,在輸出界面發(fā)現(xiàn)了message sent to deallocated instance錯誤日志
在Xcode的以前版本中精续,我們可以在Xcode的Console View中使用info malloc-history 0x6d564f0來查看調用堆棧來查看崩潰發(fā)生的地方。
在新的Xcode中粹懒,調試器默認使用的LLDB重付,那么怎么在LLDB狀態(tài)下定位由于內存操作不當引起的Crash呢?
打開“活動監(jiān)視器”凫乖,在進程列表中找到測試APP對應的進程號PID(Xcode啟用調試后會在進程列表中找到對應APP的進程)
現(xiàn)在我們得到兩個主要的信息:
APP進程ID:1087
崩潰地址:0x7f7f7523ff10
打開“終端”确垫,輸入以下命令:
sudo malloc_history10870x7f7f7523ff10
得到錯誤日志弓颈,這樣就能定位到最后調用的那行代碼