解決LLDB模式下出現message sent to deallocated instance錯誤


本文在源文的基礎上做整理:http://www.devdiv.com/home.php?mod=space&uid=50901&do=blog&id=50856

 

Xcode版本7.1  IOS版本9.1

公司之前開發的一個APP,在使用環境中IOS版本升級到9.0以后,某個操作會導致程序閃退。

Xcode代碼中提示錯誤:

Thread 1: Program received signal:"EXC_BAD_ACCESS"

這樣的提示意味着對已經釋放的對象發送消息,或者對不能release的對象調用release。

默認情況下Xcode並不能准確定位到具體哪行代碼引起的問題。

 

我們先對開發環境進行設置

先打開Debug的Console View界面,讓Xcode在調試的時候輸出更多的信息:菜單XCode > Preferences

 

再對環境變量進行設置:菜單Product > Scheme > Edit Scheme

 

設置好后調試程序,在輸出界面發現了message sent to deallocated instance錯誤日志

 

在Xcode的以前版本中,我們可以在Xcode的Console View中使用info malloc-history 0x6d564f0來查看調用堆棧來查看崩潰發生的地方。

在新的Xcode中,調試器默認使用的LLDB,那么怎么在LLDB狀態下定位由於內存操作不當引起的Crash呢?

 

打開“活動監視器”,在進程列表中找到測試APP對應的進程號PID(Xcode啟用調試后會在進程列表中找到對應APP的進程)

 

現在我們得到兩個主要的信息:

APP進程ID:1087

崩潰地址:0x7f7f7523ff10

 

打開“終端”,輸入以下命令:

sudo malloc_history 1087 0x7f7f7523ff10

得到錯誤日志,這樣就能定位到最后調用的那行代碼

downLoadBtns是我們自定義的一個方法,在這個方法內部對新構建的UIButton做釋放,它就是引起崩潰的元凶。

[btn release];

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM