用NSZombieEnabled解決惱人的EXC_BAD_ACCESS錯誤
轉自:http://www.cocoachina.com/iphonedev/sdk/2011/0626/2980.html
有時開發者會遇到這樣的問題:程式突然Crash,出現EXC_BAD_ACCESS錯誤。但是不是每次都Crash,Debug時最終基本停在objc-msgsend這裡,十分令人費解。
首先解釋下EXC_BAD_ACCESS,當你向已經釋放的物件傳送訊息時就會出現這種錯誤。
至於NSZombieEnabled,就是當設定NSZombieEnabled環境變數後,一個物件銷燬時會被轉化為_NSZombie,個人感 覺和執行緒的那幾個狀態有些相似,設定NSZombieEnabled後,當你向一個已經釋放的物件傳送訊息,這個物件就不會向之前那樣Crash或者產生 一個難以理解的行為,而是放出一個錯誤訊息,然後以一種可預測的可以產生debug斷點的方式消失(原文是die),因此我們就可以找到具體或者大概是哪 個物件被錯誤的釋放了。
設定NSZombieEnabled的方法如下
- 在XCode左邊那個Groups & Files欄中找到Executables,雙擊其中的一項,或者右鍵Get Info;
- 切換到Arguments
- 這裡一共有兩個框,在下面那個Variables to be set in the environment:點+號新增一項,Name裡填NSZombieEnabled,Value填Yes,要保證前面的鉤是選中的。
好了,趕緊去找哪裡出了問題吧,至於取消NSZombieEnabled,就是吧剛才提到的那個鉤取消即可。
最後總結一下感想,首先是我對EXC_BAD_ACCESS這個錯誤還沒有足夠的認識,其次是我沒有儘快的去搜尋一下解決方法,這兩點導致我浪費了大量時間做各種各樣奇怪的除錯。幸好現在解決了,可以繼續工作了。
相關文章
- ios 關於[xxx timeIntervalSinceNow]出現EXC_BAD_ACCESS錯誤的解決辦法iOS
- 糖豆人epic賬戶錯誤14怎麼解決
- undefined reference to錯誤的解決方法Undefined
- SAXParseException的錯誤解決之二Exception
- PHP錯誤“Thisfilehasexpired”的解決方法PHP
- VIM 常用錯誤解決
- sqldeveloper for windows 錯誤解決SQLDeveloperWindows
- dns錯誤怎麼辦 dns錯誤的解決辦法DNS
- vsftpd 錯誤:530 and 500 錯誤解決方法FTP
- unknown software exception應用程式錯誤的解決辦法Exception
- 用Jmail元件發郵件錯誤的解決辦法薦AI元件
- 解決MySQL server has gone away錯誤的解決方案MySqlServerGo
- Qt報Multiple definition錯誤的解決QT
- Cocopods的升級錯誤解決
- 解決 ngrok 的 Domain 錯誤問題AI
- 錯誤Namenodeisinsafemode的解決方法
- 解決DBCA的ORA-32700錯誤
- 【MySQL】解決mysql的 1594 錯誤MySql
- latex 錯誤以及解決方案
- ora-27504錯誤解決
- Datastore error in 'dirbdb'錯誤解決ASTError
- ORA-27054 錯誤解決
- mysql與php錯誤解決MySqlPHP
- mysql錯誤解決總結MySql
- 【故障解決】OGG-00446 錯誤解決
- 微信支付錯誤兩個問題的解決:curl出錯,錯誤碼:60
- 寬頻連線錯誤678 寬頻連線錯誤691錯誤的解決辦法
- dbfread報錯ValueError錯誤解決方法Error
- 騷爆了... Go 錯誤處理中再套個娃,能解決煩惱不?Go
- standby新增檔案錯誤的解決方法
- MYSQL中 TYPE=MyISAM 錯誤的解決方法MySql
- Mac上搭建chromedriver的錯誤解決方法MacChrome
- 一個 ExpressionChangedAfterItHasBeenCheckedError 錯誤的解決過程ExpressError
- scp出現錯誤的解決辦法
- [傳]解決DBCA的ORA-32700錯誤
- ORA-00091錯誤的解決方式
- sqplus 的 segmentation fault錯誤及解決!Segmentation
- 編譯EJB出現錯誤的解決編譯