iOS-僵尸對象調試

轉自:http://www.reibang.com/p/f6e6b4f21ca2

因為遇到一個比較詭異的野指針問題,搞了半天才搞定嘱丢,在此記錄下解決方法卸耘。

1、如何調試僵尸對象

經(jīng)過上面的真機調試之后伍俘,發(fā)現(xiàn)我們的程序崩在了一個方法里邪锌,并且報錯 “Thread 1:EXC_BAD_ACCESS(code=1,address=0x4000)”,這種錯誤通常是內存管理的問題癌瘾,一般是訪問了已經(jīng)釋放的對象導致的觅丰,可以開啟僵尸對象(Zombie Objects)來定位問題。

第一步:還是打開Xcode 選擇屏幕左上角Xcode-> PReferencese妨退,不過我們這次是要設置一下輸出信息妇萄,調試的時候輸出更多的信息蜕企,如下截圖,勾上:

設置.png

第二步:再對環(huán)境變量進行設置:菜單Product > Scheme > Edit Scheme

把紅色圈里面的三個選項都勾上

勾上

開啟該選項后冠句,程序在運行時轻掩,如果訪問了已經(jīng)釋放的對象,則會給出較準確的定位信息懦底,可以幫助確定問題所在放典。

該功能的原理是,在對象釋放(retainCount為0)時基茵,使用一個內置的Zombie對象,替代原來被釋放的對象壳影。無論向該對象發(fā)送什么消息(函數(shù)調用)拱层,都會觸發(fā)異常,拋出調試信息宴咧。

記得在問題被修復后根灯,關閉該功能!掺栅!

第三步:設置好后調試程序烙肺,在輸出界面發(fā)現(xiàn)了-[CFString retain]: message sent to deallocated instance錯誤日志

到這里,就已經(jīng)很明顯看出來是什么原因導致程序崩潰的了氧卧,然后再去分析代碼桃笙,靜下心來肯定能解決問題的了。

我這里是因為向一個空的NSString類型發(fā)送消息導致崩潰的沙绝,但是這個問題只在iOS9版本崩潰搏明,iOS10就沒問題,這個還值得深究闪檬。

2星著、例子

為了能夠更加詳細地說明調試僵尸對象,并定位到崩潰的原因粗悯,下面列出一個簡單的例子來說明:

先創(chuàng)建一個 DebugViewController虚循,然后里面創(chuàng)建一個數(shù)組,然后釋放样傍,在Controller將要出現(xiàn)的時候横缔,向該數(shù)組發(fā)送一個消息:

#import "DebugViewController.h"

@interface DebugViewController ()

@end

@implementation DebugViewController

/*定義一個數(shù)組*/

static NSMutableArray*array;

-(void)viewDidLoad

{

[super viewDidLoad];

array= [[NSMutableArray alloc]initWithCapacity:5];

[array release];//釋放掉該數(shù)組

}

- (void)viewWillAppear:(BOOL)animated{

[array addObject:@"Hello"];//使用釋放掉的數(shù)組

}

@end

在我們意料之中,程序崩潰了铭乾,報錯信息如下:

崩潰信息.png

我們用LLDB po我們的數(shù)組array對象剪廉,同樣沒有返回

po數(shù)組對象

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

活動監(jiān)視器.png

從上面標下劃線的地方炕檩,我們得到兩個主要的信息:

APP進程ID:21122

崩潰地址:0x60008170cfd0

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

sudo malloc_history 21122 0x60008170cfd0

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

終端.png

就是我們上面的release釋放掉了array對象導致的。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末泉沾,一起剝皮案震驚了整個濱河市捞蚂,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌跷究,老刑警劉巖姓迅,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異俊马,居然都是意外死亡丁存,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門柴我,熙熙樓的掌柜王于貴愁眉苦臉地迎上來解寝,“玉大人,你說我怎么就攤上這事艘儒×祝” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵界睁,是天一觀的道長觉增。 經(jīng)常有香客問我,道長翻斟,這世上最難降的妖魔是什么逾礁? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮访惜,結果婚禮上敞斋,老公的妹妹穿的比我還像新娘。我一直安慰自己疾牲,他們只是感情好植捎,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著阳柔,像睡著了一般焰枢。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上舌剂,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天济锄,我揣著相機與錄音,去河邊找鬼霍转。 笑死荐绝,一個胖子當著我的面吹牛,可吹牛的內容都是我干的避消。 我是一名探鬼主播低滩,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼召夹,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了恕沫?” 一聲冷哼從身側響起监憎,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎婶溯,沒想到半個月后鲸阔,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡迄委,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年褐筛,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片叙身。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡死讹,死狀恐怖,靈堂內的尸體忽然破棺而出曲梗,到底是詐尸還是另有隱情,我是刑警寧澤妓忍,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布虏两,位于F島的核電站,受9級特大地震影響世剖,放射性物質發(fā)生泄漏定罢。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一旁瘫、第九天 我趴在偏房一處隱蔽的房頂上張望祖凫。 院中可真熱鬧,春花似錦酬凳、人聲如沸惠况。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽稠屠。三九已至,卻和暖如春翎苫,著一層夾襖步出監(jiān)牢的瞬間权埠,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工煎谍, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留攘蔽,地道東北人。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓呐粘,卻偏偏與公主長得像满俗,于是被迫代替她去往敵國和親转捕。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內容

  • 問題描述 近來漫雷,發(fā)現(xiàn)Xcode的模擬器越來越不靠不住了瓜富,應用開發(fā)完,在模擬器上面各種流暢各種運行得飛起降盹,但是安裝到...
    甘邦閱讀 13,923評論 27 96
  • 又來到了一個老生常談的問題与柑,應用層軟件開發(fā)的程序員要不要了解和深入學習操作系統(tǒng)呢? 今天就這個問題開始蓄坏,來談談操...
    tangsl閱讀 4,098評論 0 23
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結起來就是把...
    Dove_iOS閱讀 27,130評論 30 470
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,737評論 25 707
  • 被遺忘的理想主義青年
    gudish閱讀 387評論 0 0