一:EXC_BAD_ACCESS異常介紹
在調試objective-c程序的過程中,程序crash的現象在所難免,但大部分的錯誤都能夠通過顯示的錯誤原因結合NSLog的方式來解決,比如NSInvalidArgumentException(名字就能看出來是什么錯誤)等,實在搞不定還有debug這個殺手鐧。但唯獨EXC_BAD_ACCESS這個異常太難處理了,名字看不出來是什么原因,其他提示也沒有,debug都搞不定。
先來介紹下EXC_BAD_ACCES:這個異常基本上是內存使用不當造成的,而且90%的錯誤來源在於對一個已經釋放的對象進行release操作。
二:分析方法
為工程運行時加入 NSZombieEnabled 環境變量,並設為啟用,則在 EXC_BAD_ACCESS 發生時,XCode 的 Console 會打印出問題描述。並同時添加MallocStackLogging和MallocStackLoggingNoCompact兩個環境變量,來啟用malloc記錄

三:輸出信息
只要添加了NSZombieEnabled變量,在發生EXC_BAD_ACCESS會在concole中打印出錯誤原因,絕大多數都會出現這個信息
運行代碼,出現下面的崩潰現象

下面我們打開“活動監視器”,找到我們對應的PID,我們的Target為HPThemeManager,只要找到HPThemeManager對應的PID就可以(HPThemeManager是在論壇里下載的,本來正在看代碼,就直接拿他來作試驗了)

現在,我們得到了兩個主要的信息:
進程ID:50127
崩潰地址:0x6d564f0
我們打開終端,輸入以下命令:
[代碼]c#/cpp/oc代碼:
1 |
sudo malloc_history 50127 0x6d564f0 |
結果顯示為:

這樣我們用能定位到這行代碼
轉自:http://www.1000phone.net/thread-6921-1-2.html