iOS調(diào)試 - instruments

instrument里面包含了很多工具犁珠,內(nèi)存溢出分析,性能分析互亮,各種分析…… 這里就不細(xì)說了.
主要看看專用debug的內(nèi)存溢出分析工具的使用


Analyze靜態(tài)分析

相信IOS開發(fā)者在App進(jìn)行Build或Archive時(shí)犁享,會(huì)產(chǎn)生很多編譯警告,這些警告是編譯時(shí)產(chǎn)生的豹休,靜態(tài)分析的過程也類似炊昆,在XCode Product菜單下,點(diǎn)擊Analyze對(duì)App進(jìn)行靜態(tài)分析威根。
Analyze主要分析以下四種問題:

邏輯錯(cuò)誤:訪問空指針或未初始化的變量等凤巨;
內(nèi)存管理錯(cuò)誤:如內(nèi)存泄漏等;
聲明錯(cuò)誤:從未使用過的變量洛搀;
Api調(diào)用錯(cuò)誤:未包含使用的庫和框架敢茁。

<li>Analyze內(nèi)存泄漏分析</li>

聲明錯(cuò)誤、邏輯錯(cuò)誤留美、Api調(diào)用錯(cuò)誤基本在編譯時(shí)都會(huì)有警告彰檬,Analyze的主要優(yōu)勢在于靜態(tài)分析內(nèi)存泄漏及代碼邏輯錯(cuò)誤。
比如在開啟arc的環(huán)境下谎砾,輸入以下一段代碼:

//截取部分圖像
+(UIImage*)getSubImage:(unsigned long)ulUserHeader
{
    UIImage * sourceImage = [UIImage imageNamed:@"header.png"];
    CGFloat height = sourceImage.size.height;
    CGRect rect = CGRectMake(0 + ulUserHeader*height, 0, height, height);

    CGImageRef imageRef = CGImageCreateWithImageInRect([sourceImage CGImage], rect);
    UIImage* smallImage = [UIImage imageWithCGImage:imageRef];
    //CGImageRelease(imageRef);

    return smallImage;
}

用注釋注釋掉CGImageRelease(imageRef)這行逢倍,雖然開起了arc,不過仍然會(huì)導(dǎo)致imageRef對(duì)象泄漏景图。

使用Analyze進(jìn)行分析较雕,在導(dǎo)航欄Analyze選擇Analyzer查看分析結(jié)果:


Analyze已經(jīng)分析出imageRef對(duì)象有內(nèi)存泄漏,這種情況在編譯時(shí)是無法發(fā)現(xiàn)的挚币。
如果你沒有使用ARC亮蒋,那么Analyze更有用扣典。
Analyze的其他三種分析也可以使用,相比編譯器給出的信息更明確宛蚓。

<li>Analyze邏輯錯(cuò)誤監(jiān)測</li>

這種情況在codereview時(shí)也較難發(fā)現(xiàn)激捏,可以借助Analyze。
如上代碼凄吏,當(dāng)Tag不等于1远舅、2和3的時(shí)候,就會(huì)出現(xiàn)很問題了痕钢。
Analyze還給出了箭頭提示:len is a garbage value图柏。建議在聲明變量時(shí),同時(shí)進(jìn)行初始化任连。

leaks工具

點(diǎn)擊Product->Profile蚤吹,然后選擇那個(gè)漏水的水管Leaks,進(jìn)入界面后随抠,點(diǎn)擊運(yùn)行裁着,instruments就會(huì)開始自動(dòng)檢測內(nèi)存泄露的地方了,在這個(gè)過程中拱她,可以對(duì)手機(jī)上運(yùn)行的測試工程進(jìn)行操作二驰,圖形界面中,上面是Allocations秉沼,下面是Leaks桶雀,當(dāng)出現(xiàn)了一條紅色的小柱子的時(shí)候,就是出現(xiàn)了內(nèi)存泄露唬复;點(diǎn)擊界面中間分隔條矗积,選擇Call Tree選項(xiàng),然后把右邊的 “Invert Call Tree” 和 “Hide System Libraries”選項(xiàng)敞咧,就可以看到具體是那個(gè)類中得哪個(gè)方法出現(xiàn)了內(nèi)存泄露了棘捣,雙擊類名,就出顯示出此類此方法中造成的內(nèi)存泄露代碼休建,ok乍恐,接下來就是有針對(duì)性的進(jìn)行代碼優(yōu)化,內(nèi)存優(yōu)化了丰包。
由于現(xiàn)在用得都是ARC模式,所以一般出現(xiàn)泄露的地方都是block中的self疏忽了壤巷,沒有使用weak類型邑彪;或者,兩個(gè)類之間出現(xiàn)了循環(huán)應(yīng)用這種低級(jí)錯(cuò)誤引起的胧华。

打開Xcode自帶的Instruments:



或者:


選擇Leaks選項(xiàng)


下面我們進(jìn)入正式的測試寄症。
1.選中Xcode先把程序(command + R)運(yùn)行起來宙彪。
2.再選中Xcode,按快捷鍵(command + control + i)運(yùn)行起來,此時(shí)Leaks已經(jīng)跑起來了有巧。
3.由于Leaks是動(dòng)態(tài)監(jiān)測释漆,所以我們需要手動(dòng)操作APP,一邊操作,一邊觀察Leaks的變化篮迎,當(dāng)出現(xiàn)紅色叉時(shí)男图,就監(jiān)測到了內(nèi)存泄露,點(diǎn)擊右上角的第二個(gè)甜橱,進(jìn)行暫停檢測(也可繼續(xù)檢測逊笆,當(dāng)多個(gè)時(shí)暫停,一次處理了多個(gè)).如圖所示:

4.下面就是定位修改了,此時(shí)選中有紅色柱子的Leaks岂傲,下面有個(gè)"田"字方格难裆,點(diǎn)開,選中Call Tree镊掖,顯示如下圖界面:


5.下面就是最關(guān)鍵的一步乃戈,在這個(gè)界面的右下角有若干選框,選中Invert Call Tree 和Hide System Libraries,(紅圈范圍內(nèi))顯示如下:


到這里就算基本完成啦亩进,這里顯示的就是內(nèi)存泄露代碼部分症虑,那么現(xiàn)在還差一步:定位!

6.選中顯示的若干條中的一條,雙擊镐侯,會(huì)自動(dòng)跳到內(nèi)存泄露代碼處侦讨,如圖所示


7.最后一步,就是根據(jù)內(nèi)存泄露的提示修改代碼了苟翻!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末韵卤,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子崇猫,更是在濱河造成了極大的恐慌沈条,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件诅炉,死亡現(xiàn)場離奇詭異蜡歹,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)涕烧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門月而,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人议纯,你說我怎么就攤上這事父款。” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我礁叔,道長燎竖,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘所刀。我一直安慰自己,他們只是感情好伐憾,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布勉痴。 她就那樣靜靜地躺著,像睡著了一般树肃。 火紅的嫁衣襯著肌膚如雪蒸矛。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天胸嘴,我揣著相機(jī)與錄音雏掠,去河邊找鬼。 笑死劣像,一個(gè)胖子當(dāng)著我的面吹牛乡话,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播耳奕,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼绑青,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了屋群?” 一聲冷哼從身側(cè)響起闸婴,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎芍躏,沒想到半個(gè)月后邪乍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡对竣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年庇楞,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片否纬。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡吕晌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出临燃,到底是詐尸還是另有隱情睛驳,我是刑警寧澤壁拉,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站柏靶,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏溃论。R本人自食惡果不足惜屎蜓,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望钥勋。 院中可真熱鬧炬转,春花似錦、人聲如沸算灸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽菲驴。三九已至荐吵,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間赊瞬,已是汗流浹背先煎。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留巧涧,地道東北人薯蝎。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像谤绳,于是被迫代替她去往敵國和親占锯。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 了解:在蘋果沒有出ARC(自動(dòng)內(nèi)存管理機(jī)制)時(shí)缩筛,iOS開發(fā)攻城獅幾乎有一半的開發(fā)時(shí)間都消耗在怎么管理內(nèi)存上后來蘋果...
    小白文_Vincent閱讀 5,611評(píng)論 0 9
  • 前言: 本篇文章消略,在于學(xué)習(xí),我把別人的一些感覺好的文章匯總成了一篇歪脏,親自實(shí)現(xiàn)了一下疑俭,留用于今后學(xué)習(xí)資料。 文章脈絡(luò)...
    麥穗0615閱讀 3,511評(píng)論 4 49
  • 性能對(duì)于一款app來說至關(guān)重要婿失,而程序的內(nèi)存占用情況就是一項(xiàng)很重要的性能指標(biāo)钞艇。雖然iOS 5.0版本之后加入了AR...
    樹根曰閱讀 2,730評(píng)論 0 13
  • [這是第15篇] 導(dǎo)語:在當(dāng)前的iOS開發(fā)中,雖然ARC為開發(fā)者解決了手動(dòng)內(nèi)存管理時(shí)代 的許多麻煩豪硅,但是內(nèi)存方面的...
    南華coder閱讀 7,442評(píng)論 10 78
  • 愁到濃時(shí)淚自流哩照, 風(fēng)蕭蕭,雨瀟瀟懒浮。 一酒千憂飘弧, 付水皆東流识藤。 可憐不曾相識(shí)見, 千行淚次伶,滿面憂痴昧。 明月夜下倚孤舟,...
    狄楓Leslie閱讀 271評(píng)論 2 2