初識(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)載自:這里




