描述
在使用異常斷點發(fā)現(xiàn),項目crash的位置在main函數(shù)中西傀,提示thread 1:exc_bad_access(code=1,adress=0x10)
,然后設(shè)置Product->Scheme->Edit Scheme->Run ???.app右邊的選項中,選中Enable Zombie Objects桶癣,后斷點在匯編語法中拥褂,提示thread 1:exc_breakpoint(code=1,subcode=0x189a6clcc)
解決方法
由于勾選了Enable Zombie Objects
,雖然出現(xiàn)斷點牙寞,但是沒有打印信息饺鹃,切換到Tab Aguments 配置環(huán)境變量MallocStackLoggingNoCompact
,NSZombieEnabled
,MallocStackLogging
; 注意:這時候需要在模擬器中運行app,重現(xiàn)剛剛的crash過程间雀。你會發(fā)現(xiàn)在控制臺中輸出一些數(shù)據(jù)悔详,最起碼有message sent to deallocated instance 0x7fbc1b52bc00
;在我的項目中 ,打印出***** -[XYHStoreDetailViewController respondsToSelector:]: message sent to deallocated instance 0x7fbc1b52bc00**
拿到了這個指針之后惹挟,在終端中輸入 malloc_history 40888 0x7fbc1b52bc00 |grep 0x7fbc1b52bc00
,注意這個40888是當(dāng)前進(jìn)程的id茄螃,這個方法是這篇博客介紹的, 但是我在執(zhí)行時连锯,提示40888這個進(jìn)程沒有運行归苍,說明每個電腦的進(jìn)程id可能不一樣。提示
malloc_history cannot examine process 40888 (with name like '40888') because it no longer appears to be running.
如果不知道當(dāng)前進(jìn)程id怎么辦呢萎庭,我是根據(jù)打印出來的信息去解決的[XYHStoreDetailViewController respondsToSelector:]
;在我的項目中霜医,我找到這個類,這是我觸發(fā)crash方法的類驳规,然后找對事件處理的方法肴敛,發(fā)現(xiàn)我是在一個被釋放的對象中調(diào)用了一個對象,從新修改代碼吗购,然后發(fā)現(xiàn)問題就解決了