當你對已釋放的物件傳送訊息(90%的可能是對引用計數為0的物件再release)或release那些autorelease物件時,就會出現報exc_bad_access這樣的錯誤。
預設設定下 xcode不會給你定位具體是哪一行**不該去使用已釋放的物件,或者release用錯了。
product -> edit scheme(option+command+r) -> diagnostics ,勾選「objective-c」之後的「enable zombie objects」。
設定nszombieenabled環境變數後,乙個物件銷毀時會被轉化為_nszombie;設定nszombieenabled後,當你向乙個已經釋放的物件傳送訊息,這個物件就不只是報exc_bad_access crash,還會放出乙個錯誤訊息,然後以一種可**的可以產生debug斷點的方式消失, 因此我們可以找到具體或者大概是哪個物件被錯誤的釋放或引用了。
注意:nszombieenabled只能在除錯的時候使用,千萬不要忘記在產品發布的時候去掉,因為nszombieenabled不會真正去釋放dealloc物件的記憶體,一直開啟後果自負!
exc bad access的定位方法
網上有一些關於這個問題的解決辦法,但是多數說得不清楚,我結合自己的實踐,描述一下具體的步驟。1.在xcode的groups files executables資料夾中,雙擊,選擇arguments,選擇下面一欄,點 號,新增四個變數,名字分別為 nszombieenabled mallocstack...
exc bad access的定位方法
網上有一些關於這個問題的解決辦法,但是多數說得不清楚,我結合自己的實踐,描述一下具體的步驟。1.在xcode的groups files executables資料夾中,雙擊,選擇arguments,選擇下面一欄,點 號,新增四個變數,名字分別為 nszombieenabled mallocstack...
exc bad access檢視bug的方法
有時程式崩潰根本不知錯誤發生在什麼地方。比如程式出現exec bad access的時候,雖然大部分情況使用設定 nszombieenabled環境變數可以幫助你找到問題的所在,但少數情況下,即使設定了nszombieenabled環境變數,還是不知道程式崩 潰在什麼地方。那麼就需要使用下列 進行幫...