LLDB簡介

今天簡單介紹一下斷點(diǎn)以及l(fā)ldb調(diào)試程序汁汗。

每個(gè)程序員都在入門的時(shí)候接觸過斷點(diǎn),也在入門的時(shí)候程序各種崩潰。最開始我相信都是通過NSLog來對程序進(jìn)行調(diào)試找bug的衔憨。那么為什么有了NSLog可以調(diào)試程序還要用lldb調(diào)試呢黑忱?

首先我們要知道NSLog不是簡單的封裝了printf宴抚,NSLog的大量使用會(huì)嚴(yán)重影響程序的運(yùn)行效率,這個(gè)可以從蘋果的API中找到關(guān)于NSLog的詳細(xì)介紹甫煞。

Logs an error message to the Apple System Log facility.

NSLog就不是設(shè)計(jì)作為普通的debug log的菇曲,而是error log。

NSLog也并非是printf的簡單封裝抚吠,而是Apple System Log(后面簡稱ASL)的封裝常潮。

在使用NSLog 時(shí),NSLog會(huì)向ASL寫log楷力,同時(shí)向Terminal寫log喊式,而且同時(shí)會(huì)出現(xiàn)在Console.app中(Mac自帶軟件,用NSLog打出的log在其中全部可見)萧朝;不僅如此岔留,每一次NSLog都會(huì)新建一個(gè)ASL client并向ASL守護(hù)進(jìn)程發(fā)起連接,log之后再關(guān)閉連接检柬。

總之献联,因?yàn)镹SLog的大量使用(特別在循環(huán)中出現(xiàn)NSLog)對我們程序的運(yùn)行造成嚴(yán)重的不良影響,因此我們轉(zhuǎn)投LLDB的懷抱對程序進(jìn)行調(diào)試何址。

LLDB出現(xiàn)在xcode4.3版本之后里逆,之前用的是gdb,不過兩者差別不是很大头朱,熟練使用了gdb那么也能輕易的掌握lldb运悲。

LLDB是Xcode默認(rèn)的調(diào)試器,我們可以直接在xcode的控制臺進(jìn)行輸入lldb命令项钮。

LLDB的命令遵循唯一匹配原則:假如根據(jù)前n個(gè)字母已經(jīng)能唯一匹配到某個(gè)命令班眯,則只寫前n個(gè)字母等效于寫下完整的命令希停。

下面我們通過實(shí)際操作來看看關(guān)于lldb的一些簡單命令


1:首先我們通過打斷點(diǎn)(如上圖點(diǎn)擊24行)看一下最常見的四條命令

p po? exp? call這四條命令我們可以通過輸入help+p或者h(yuǎn)elp+po等等來查看命令的使用介紹

如下:


在我們看完使用介紹之后我們會(huì)發(fā)現(xiàn)它們表示的意思是一模一樣的,換句話來說署隘,這四條命令可以替換使用宠能,只不過輸出結(jié)果有所區(qū)別,這里我以對象為例,也可以輸出基本數(shù)據(jù)類型磁餐。下圖是對四條命令的使用:

上面提到了唯一匹配原則违崇,因此ca能唯一的代表call。如下:

細(xì)心的我突然發(fā)現(xiàn)一個(gè)問題诊霹,那就是輸出結(jié)果$0,$2,$3這些變量是什么意思呢羞延?其實(shí)它們是用來表示之前的self.lab,在之后的打印中我們可以直接使用? 命令+$7,如下圖:

2:接下來再講一些其它常用指令


如上圖程序脾还,運(yùn)行之后肯定直接崩潰伴箩,崩潰信息如下


只需要輸入image lookup -a 地址 就可以找到bug所在的位置

bt :打印當(dāng)前線程調(diào)用的堆棧

bt all? :打印所有線程調(diào)用的堆棧

image :用于尋址


通過指令得到bug位置出現(xiàn)在viewController的m文件31行

3:上面講了通過lldb打印結(jié)果,那么假如我在運(yùn)行的過程中要改變程序的運(yùn)行結(jié)果鄙漏,如果通過代碼直接修改這樣會(huì)很麻煩嗤谚,那么怎么可以非常的改變卻又不修改代碼呢?


這是原來的運(yùn)行結(jié)果怔蚌,那么接下來我要將lab變成黃色怎么操作呢巩步?


我們只需要在控制臺輸入以下命令,按回車鍵最后點(diǎn)擊繼續(xù)執(zhí)行(紅線所示)桦踊。


最后模擬器的結(jié)果如下:


4:剛才我們的程序都是通過中止程序的運(yùn)行來進(jìn)行調(diào)試椅野,那么是否可以不終止程序執(zhí)行也能進(jìn)行調(diào)試呢?

結(jié)果肯定是可以钞钙,那么接下來按住command+option鍵然后點(diǎn)擊斷點(diǎn)鳄橘;或者直接右擊斷點(diǎn)声离,之后會(huì)彈出提示框芒炼,接下來點(diǎn)擊edit breakpoint,彈出如下圖所示的界面术徊。

接下來我們以此分析界面上的幾個(gè)參數(shù)

其中action里面又有幾個(gè)不同的選項(xiàng)本刽,黨執(zhí)行此斷點(diǎn)的時(shí)候,可以同時(shí)執(zhí)行以下幾個(gè)選項(xiàng)

AppleScript:蘋果的腳本語言

Capture GPU Frame:做圖形界面的時(shí)候使用

Debugger Command :debugger調(diào)試的使用赠涮,默認(rèn)就是此項(xiàng)

Log Message:日志信息

Shell Command:可執(zhí)行的文件

Sound:提示的聲音

接下來我們使用一下此斷點(diǎn)子寓,如下圖:

上面的斷點(diǎn)表示的意思是如果lab的背景顏色為紅色就執(zhí)行此斷點(diǎn),執(zhí)行斷點(diǎn)觸發(fā)兩個(gè)動(dòng)作笋除,一個(gè)是將lab的背景顏色改為黃色斜友,一個(gè)是有聲音提示。最后一個(gè)options表示執(zhí)行此斷點(diǎn)不會(huì)中斷程序執(zhí)行

5:這里需要注意的一點(diǎn)直接打印self.lab.frame的時(shí)候垃它,會(huì)提示無此屬性;需要顯示的指定數(shù)據(jù)類型鲜屏,用po(CGRect)[self.lab frame]


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末烹看,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子洛史,更是在濱河造成了極大的恐慌惯殊,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件也殖,死亡現(xiàn)場離奇詭異土思,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)忆嗜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進(jìn)店門己儒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人捆毫,你說我怎么就攤上這事址愿。” “怎么了冻璃?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵响谓,是天一觀的道長。 經(jīng)常有香客問我省艳,道長娘纷,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任跋炕,我火速辦了婚禮赖晶,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘辐烂。我一直安慰自己遏插,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布纠修。 她就那樣靜靜地躺著胳嘲,像睡著了一般。 火紅的嫁衣襯著肌膚如雪扣草。 梳的紋絲不亂的頭發(fā)上了牛,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天,我揣著相機(jī)與錄音辰妙,去河邊找鬼鹰祸。 笑死,一個(gè)胖子當(dāng)著我的面吹牛密浑,可吹牛的內(nèi)容都是我干的蛙婴。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼尔破,長吁一口氣:“原來是場噩夢啊……” “哼街图!你這毒婦竟也來了背传?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤台夺,失蹤者是張志新(化名)和其女友劉穎径玖,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體颤介,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡梳星,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了滚朵。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片冤灾。...
    茶點(diǎn)故事閱讀 38,566評論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖辕近,靈堂內(nèi)的尸體忽然破棺而出韵吨,到底是詐尸還是另有隱情,我是刑警寧澤移宅,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布归粉,位于F島的核電站,受9級特大地震影響漏峰,放射性物質(zhì)發(fā)生泄漏糠悼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一浅乔、第九天 我趴在偏房一處隱蔽的房頂上張望倔喂。 院中可真熱鬧,春花似錦靖苇、人聲如沸席噩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽悼枢。三九已至,卻和暖如春芯砸,著一層夾襖步出監(jiān)牢的瞬間萧芙,已是汗流浹背给梅。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工假丧, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人动羽。 一個(gè)月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓包帚,卻偏偏與公主長得像,于是被迫代替她去往敵國和親运吓。 傳聞我的和親對象是個(gè)殘疾皇子渴邦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評論 2 348

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

  • 轉(zhuǎn)載 與調(diào)試器共舞 - LLDB 的華爾茲: https://objccn.io/issue-19-2/ 推薦:i...
    F麥子閱讀 3,329評論 0 10
  • 與調(diào)試器共舞 - LLDB 的華爾茲 nangege 2014/12/19 你是否曾經(jīng)苦惱于理解你的代碼疯趟,而去嘗試...
    McDan閱讀 881評論 0 0
  • 隨著Xcode 5的發(fā)布,LLDB調(diào)試器已經(jīng)取代了GDB谋梭,成為了Xcode工程中默認(rèn)的調(diào)試器信峻。它與LLVM編譯器一...
    隨風(fēng)飄蕩的小逗逼閱讀 1,401評論 0 0
  • 最近,關(guān)于 @Steipete 在Radar發(fā)布的帖子瓮床,筆者看到很多人在問「你是怎么理解那個(gè)偽代碼的」盹舞。筆者想寫博...
    OneAPM閱讀 2,882評論 2 19
  • [轉(zhuǎn)]淺談LLDB調(diào)試器文章來源于:http://www.cocoachina.com/ios/20150126/...
    loveobjc閱讀 2,487評論 2 6