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

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

 

Xcode版本7.1  IOS版本9.1測試

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

Xcode代碼中提示錯誤:spa

Thread 1: Program received signal:"EXC_BAD_ACCESS"

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

默認狀況下Xcode並不能準肯定位到具體哪行代碼引發的問題。調試

 

咱們先對開發環境進行設置日誌

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

 

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

 

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

 

在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];
相關文章
相關標籤/搜索