【iOS開發(fā)】讓lldb提升你的效率

開發(fā)這么長(zhǎng)時(shí)間朴读,現(xiàn)在才知道原來(lái)有l(wèi)ldb這個(gè)東西谢翎,感覺真是找到救星了捍靠,以后再也不用再一個(gè)一個(gè)添加NSLog,然后再command+R來(lái)調(diào)試森逮。

簡(jiǎn)單的使用

一般情況下榨婆,我們最常用的命令有三個(gè),p, po, expr褒侧。
  p 其主要功能是輸出原生類型(boolean良风、integer、float闷供、etc)的信息烟央。
  po 其主要功能是輸出objective-c中對(duì)象(objects)的信息
  expr 在運(yùn)行時(shí)修改變量的值。

使用方法

1歪脏、 **p, po **打印變量的值
在xcode中打開一個(gè)app疑俭,在想要break的行號(hào)上單擊,即可生成一個(gè)深色的箭頭標(biāo)識(shí)--斷點(diǎn)婿失。如下圖钞艇,在viewDidLoad:中設(shè)置了斷點(diǎn)。


Xcode LLDB Debug

運(yùn)行app豪硅,等待哩照。。懒浮。就可以看到xcode在斷點(diǎn)處進(jìn)入調(diào)試模式飘弧,現(xiàn)在讓我們把視線移到xcode右下角的控制臺(tái),有木有看到(lldb)這樣一行砚著,鼠標(biāo)移到此行眯牧,輸入
po [self view]
回車,看看控制臺(tái)上是不是多了一些view的信息赖草,如下圖:

Xcode LLDB Debug

po(printobject)是LLDB的一個(gè)命令学少,其主要功能是輸出objective-c中對(duì)象(objects)的信息,與之相似的另外一個(gè)命令是p(print)秧骑,其主要功能是輸出原生類型(boolean版确、integer扣囊、float、etc)的信息绒疗。
控制臺(tái)輸入
p (int)[[[self view] subviews] count]
結(jié)果如下(int) $2 = 2
注意這個(gè)使用了類型轉(zhuǎn)換告知調(diào)試器應(yīng)該如何處理返回值侵歇。

2、expr:運(yùn)行時(shí)修改變量的值
你以前怎么驗(yàn)證是不是某個(gè)變量的值導(dǎo)致整段程序不能正常工作吓蘑?修改代碼中的變量的值惕虑,然后cmd+r重新啟動(dòng)app?現(xiàn)在你不需要這么做了磨镶,只需要設(shè)置一個(gè)斷點(diǎn)溃蔫,當(dāng)程序在這進(jìn)入調(diào)試模式后,使用expr命令即可在運(yùn)行時(shí)修改變量的值琳猫。
假如有一個(gè)loginWithUsername:方法伟叛,需要兩個(gè)參數(shù):username,password脐嫂。
首先設(shè)置好斷點(diǎn)统刮,如下圖所示:


運(yùn)行app,進(jìn)入斷點(diǎn)模式后账千,在(lldb)后輸入

expr username =@"username"
expr password =@"badpassword"

控制臺(tái)會(huì)返回以下信息

(NSString *) $0 =0x3d3504c4 @"username"
(NSString *) $1 =0x1d18ef60 @"badpassword"

現(xiàn)在跳出斷點(diǎn)侥蒙,執(zhí)行斷點(diǎn)之后的兩條輸出語(yǔ)句,控制臺(tái)會(huì)有以下輸出

(0x1c59aae0) A line for the breakpoint
(0x1c59aae0) Username andPassword after: username:badpassword

看到看吧匀奏,我們?cè)谶\(yùn)行時(shí)修改了變量的值辉哥,事情還可以變的更簡(jiǎn)單一些,我們可以編輯斷點(diǎn)攒射,讓它自動(dòng)填充需要的修改的變量的值醋旦,并且可以選擇在此斷點(diǎn)處不進(jìn)入斷點(diǎn)模式,僅僅修改指定變量的值会放,然后自動(dòng)執(zhí)行后續(xù)代碼饲齐。
右擊斷點(diǎn)選擇“EditBreakpoint...”(或者按住cmd+option,單擊斷點(diǎn))咧最,然后如下圖所示設(shè)置斷點(diǎn)


注意選中了最后一行(“Automatically continue afterevaluating”)的選擇框捂人,這就保證運(yùn)行到這個(gè)斷點(diǎn)的時(shí),填充變量的值矢沿,然后繼續(xù)運(yùn)行滥搭,并不在此處斷點(diǎn)進(jìn)入調(diào)試模式。
運(yùn)行app捣鲸,你會(huì)得到和上述手動(dòng)設(shè)置變量的值一樣的輸出瑟匆。
接下來(lái)單擊斷點(diǎn),使其處于禁用狀態(tài)栽惶,現(xiàn)在箭頭的顏色應(yīng)該是淺藍(lán)色的愁溜,重新運(yùn)行app疾嗅,你會(huì)發(fā)現(xiàn)username和password的值沒有在運(yùn)行時(shí)被改變了。

3冕象、設(shè)置斷點(diǎn)觸發(fā)條件
斷點(diǎn)的另外一個(gè)重要作用代承,是可以設(shè)置觸發(fā)斷點(diǎn)生效的條件,這樣我們就可以在運(yùn)行時(shí)針對(duì)特定的數(shù)據(jù)進(jìn)行分析渐扮,觀察app是否運(yùn)行在正確的軌道上论悴。如下圖:


上述截圖可以看到如下語(yǔ)句

(BOOL)[(NSString*)[itemvalueForKey:@"ID"] isEqualToString:@"93306"]

通過這行語(yǔ)句,我們告訴編譯器:當(dāng)item中ID等于93306時(shí)墓律,此斷點(diǎn)生效膀估,進(jìn)入斷點(diǎn)調(diào)試模式。

4只锻、格式化輸出數(shù)據(jù)
如果你厭倦了代碼里無(wú)窮無(wú)盡的NSLog玖像,幸運(yùn)的是我們可以在編輯斷點(diǎn)使其輸出格式化字符串就像平常編碼時(shí)一樣紫谷。不過有一點(diǎn)需要注意齐饮,平常編碼時(shí)可能會(huì)使用NSString‘s stringWithFormat:輸出格式化字符串,不過這個(gè)方法貌似在斷點(diǎn)中木有效果笤昨,你需要使用alloc/init形式的方法祖驱,如下:
po [[NSString alloc]initWithFormat:@"Item index is:%d", index]

運(yùn)行app,就能在控制臺(tái)看到想要的輸出啦瞒窒!
簡(jiǎn)單捺僻!強(qiáng)大!這就是LLDB給你的選擇崇裁,從此代碼里可以不用再有NSLog滿天飛的情況了匕坯,代碼變得更干凈了,心情變得更愉悅了拔稳!
LLDB還有很多強(qiáng)大的地方葛峻。
如果想要有更了了解可以搜索這篇文章:
淺談LLDB調(diào)試器
熟練使用 LLDB,讓你調(diào)試事半功倍

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末巴比,一起剝皮案震驚了整個(gè)濱河市术奖,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌轻绞,老刑警劉巖采记,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異政勃,居然都是意外死亡唧龄,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門奸远,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)选侨,“玉大人掖鱼,你說(shuō)我怎么就攤上這事≡疲” “怎么了戏挡?”我有些...
    開封第一講書人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)晨仑。 經(jīng)常有香客問我褐墅,道長(zhǎng),這世上最難降的妖魔是什么洪己? 我笑而不...
    開封第一講書人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任妥凳,我火速辦了婚禮,結(jié)果婚禮上答捕,老公的妹妹穿的比我還像新娘逝钥。我一直安慰自己,他們只是感情好拱镐,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開白布艘款。 她就那樣靜靜地躺著,像睡著了一般沃琅。 火紅的嫁衣襯著肌膚如雪哗咆。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,370評(píng)論 1 302
  • 那天益眉,我揣著相機(jī)與錄音晌柬,去河邊找鬼。 笑死郭脂,一個(gè)胖子當(dāng)著我的面吹牛年碘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播展鸡,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼屿衅,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了娱颊?” 一聲冷哼從身側(cè)響起傲诵,我...
    開封第一講書人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎箱硕,沒想到半個(gè)月后拴竹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡剧罩,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年栓拜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡幕与,死狀恐怖挑势,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情啦鸣,我是刑警寧澤潮饱,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站诫给,受9級(jí)特大地震影響香拉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜中狂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一凫碌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧胃榕,春花似錦盛险、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至赐写,卻和暖如春鸟蜡,著一層夾襖步出監(jiān)牢的瞬間膜赃,已是汗流浹背挺邀。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留跳座,地道東北人端铛。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像疲眷,于是被迫代替她去往敵國(guó)和親禾蚕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

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

  • 轉(zhuǎn)載 與調(diào)試器共舞 - LLDB 的華爾茲: https://objccn.io/issue-19-2/ 推薦:i...
    F麥子閱讀 3,332評(píng)論 0 10
  • 前言 今天花了一天的時(shí)間終于把iOS的幾種常見的調(diào)試方法給學(xué)習(xí)了一下狂丝,在這里給大家分享一下LLDB的使用换淆,同時(shí)也是...
    Peak_One閱讀 11,025評(píng)論 5 33
  • [轉(zhuǎn)]淺談LLDB調(diào)試器文章來(lái)源于:http://www.cocoachina.com/ios/20150126/...
    loveobjc閱讀 2,506評(píng)論 2 6
  • 隨著Xcode 5的發(fā)布,LLDB調(diào)試器已經(jīng)取代了GDB几颜,成為了Xcode工程中默認(rèn)的調(diào)試器倍试。它與LLVM編譯器一...
    隨風(fēng)飄蕩的小逗逼閱讀 1,405評(píng)論 0 0
  • 不久前在網(wǎng)上看到一段小學(xué)生當(dāng)街鬧分手的視頻县习,女孩追問:“你吃的辣條是我買的,你喝的酸奶是我買的,現(xiàn)在說(shuō)分手就分手躁愿,...
    白日未了閱讀 1,288評(píng)論 11 29