Xcode LLDB Debug 教程(一)

初識(shí)LLDB

如果你在平時(shí)的開發(fā)中從未使用過調(diào)試器,那你恐怕不知道一個(gè)調(diào)試器的作用有多大。你可能只滿足于通過printf或者NSLog輸出信息用于調(diào)試。但你只要試著嘗試在調(diào)試中開始使用調(diào)試器LLDB,你會(huì)馬上感受到調(diào)試器給你帶來的便利。
LLDB是LLVM下的調(diào)試器。Xcode從4.0開始編譯器開始改用LLVM,相應(yīng)的調(diào)試器也從gdb改為LLDB。而從 Xcode5.0開始所有工程也被自動(dòng)設(shè)置為使用LLDB。下面本文從初學(xué)者的角度講解在日常的開發(fā)中如何使用LLDB以及LLDB常用的命令。
你可能從未使用過LLDB,那讓我們先來熱熱身。 在調(diào)試器中最常用到的命令是p(用于輸出基本類型)或者po(用于輸出 Objective-C 對(duì)象)。如下,你可以通過輸入po 和 view 來輸出 view 的信息:


什么?在什么地方可以輸入這個(gè)命令?Yeah,前提,我們需要先設(shè)置一個(gè)斷點(diǎn)。
比如:你可能需要的是 view 下 subview 的數(shù)量。由于 subview 的數(shù)量是一個(gè) int 類型的值,所以我們使用命令p

是不是很簡單?
細(xì)心的朋友可能會(huì)發(fā)現(xiàn)輸出的信息中帶有$1、$2的字樣。實(shí)際上,我們每次查詢的結(jié)果會(huì)保存在一些持續(xù)變量中($[0-9]+),這樣你可以在后面的查詢中直接使用這些值。比如現(xiàn)在我接下來要重新取回$1的值:

po 和 p 的區(qū)別 應(yīng)該是一個(gè)可以輸出對(duì)象 一個(gè)只能輸出c類型數(shù)據(jù),有錯(cuò)拍磚

常用命令

  • expr (expression)
    可以在調(diào)試時(shí)動(dòng)態(tài)執(zhí)行指定表達(dá)式,并將結(jié)果打印出來。常用于在調(diào)試過程中修改變量的值。運(yùn)行至斷點(diǎn)時(shí) 輸入expr i = 8

  • bt
    顯示當(dāng)前線程的堆棧 . bt all顯示線程所有堆棧

  • image
    image 命令可用于尋址,有多個(gè)組合命令。比較實(shí)用的用法是用于尋找棧地址對(duì)應(yīng)的代碼位置。 下面我寫了一段代碼


    這段代碼有明顯的錯(cuò)誤,程序運(yùn)行這段代碼后會(huì)拋出下面的異常?,F(xiàn)在,我們懷疑出錯(cuò)的地址是:0x000000010d3e9864

    可以看到出錯(cuò)的位置是RootViewController.m的第23行(其實(shí)0x000000010dd5bb4 也能看出問題),但有時(shí)候這會(huì)更直觀。

不錯(cuò)吧 很有吸引力吧 ?????

拋磚引玉:更多命令可以參考 這個(gè)網(wǎng)站
另外,facebook開源了他們擴(kuò)展的LLDB命令庫,有興趣的朋友也可以安裝看看。

  • 簡稱和別名
    這些都可以參考這個(gè)網(wǎng)站

  • 常見問題
    上面我們簡單的學(xué)習(xí)了如何使用LLDB命令。但有時(shí)我們?cè)谑褂眠@些LLDB命令的時(shí)候,依然可能會(huì)遇到一些問題。
    比如下面這個(gè)命令


  • 找不到方法
    常見于輸出frame的時(shí)候。比如你可能會(huì)得到以下的錯(cuò)誤信息:


    這似乎是lldb的一個(gè)bug,無法通過點(diǎn)屬性訪問的方法打印framework里面的對(duì)象

總結(jié)

通過上面一些簡單的講解,相信朋友們已經(jīng)知道如何使用LLDB命令來提高自己的效率了。Enjoy it!

轉(zhuǎn)載自:這里

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • LLDB的Xcode默認(rèn)的調(diào)試器,它與LLVM編譯器一起,帶給我們更豐富的流程控制和數(shù)據(jù)檢測(cè)的調(diào)試功能。平時(shí)用Xc...
    CoderSC閱讀 1,510評(píng)論 0 2
  • [轉(zhuǎn)]淺談LLDB調(diào)試器文章來源于:http://www.cocoachina.com/ios/20150126/...
    loveobjc閱讀 2,735評(píng)論 2 6
  • 隨著Xcode 5的發(fā)布,LLDB調(diào)試器已經(jīng)取代了GDB,成為了Xcode工程中默認(rèn)的調(diào)試器。它與LLVM編譯器一...
    隨風(fēng)飄蕩的小逗逼閱讀 1,462評(píng)論 0 0
  • LLDB的Xcode默認(rèn)的調(diào)試器,它與LLVM編譯器一起,帶給我們更豐富的流程控制和數(shù)據(jù)檢測(cè)的調(diào)試功能。平時(shí)用Xc...
    小笨狼閱讀 20,823評(píng)論 31 186
  • -01- 苗彤今年33歲,跟文皓結(jié)婚已經(jīng)整整8年了 結(jié)婚之前, 苗彤跟文皓談過三年的戀愛,談了三年,也打了三次胎 ...
    城東李公子閱讀 313評(píng)論 0 0

友情鏈接更多精彩內(nèi)容