LLDB 命令和調(diào)試(一)
為什么要學(xué)習(xí) LLDB 調(diào)試
對于我們程序員來說,構(gòu)建調(diào)試幾乎是每天必做的工作什黑。 你是否遇到過下列情況?
- 想打印對象的 description 來追蹤對象.
- 調(diào)試界面的時候想改變某個 view 的顏色以便查看界面布局.
- 有些代碼在某些特定條件下才能滿足,但程序運(yùn)行時未必達(dá)到這個條件.
此時我們一般會默默的按下 Command + .
, 增加一段代碼, NSLog(...) , view.backgroundColor = [UIColor redColor] 等等践付,再次按下 Command + r
查看運(yùn)行狀態(tài), 運(yùn)氣好我們能順利的達(dá)到目的廷支,運(yùn)氣不好就要重復(fù)這個步驟幾次频鉴,而且調(diào)試之后還要默默刪掉。一天下來腰酸背痛手抽筋... , 來放棄這種重復(fù)的重體力勞動吧, 我們來學(xué)一個新技能 LLDB 調(diào)試
恋拍,學(xué)會它之后你就像會了左右互搏, 雙劍合璧, 九陰真經(jīng), 玉女素心劍法... 咳咳 , 扯遠(yuǎn)了我們言歸正傳垛孔。
什么是LLDB
官方說明 http://lldb.llvm.org/index.html
LLDB is a next generation, high-performance debugger. It is built as a set of reusable components which highly leverage existing libraries in the larger LLVM Project, such as the Clang expression parser and LLVM disassembler.
LLDB is the default debugger in Xcode on Mac OS X and supports debugging C, Objective-C and C++ on the desktop and iOS devices and simulator.
....
Wikipedia https://en.wikipedia.org/wiki/LLDB_(debugger)
Current state
Although LLDB is in early development, it is mature enough to support basic debugging of programs writtenten in C, Objective-C, C++ and Swift.
LLDB is known to work on OS X, Linux, FreeBSD, and Windows[2] and supports i386, x86-64 and ARM instruction sets.[3] It is used as a default debugger for Xcode 4.3 and later versions
由以上資料可知,LLDB 是下一代高性能的調(diào)試器施敢,現(xiàn)在已經(jīng)支持在多個平臺運(yùn)行周荐,支持 C, C++, Objective-C,Swift僵娃。從 LLVM 編譯器語言無關(guān)的特性來看概作,以后有可能會支持更多的語言。
Xcode 從4.3版本開始就集成該調(diào)試器了默怨,現(xiàn)在更是變成了默認(rèn)選項(xiàng)讯榕。可以簡單的認(rèn)為 LLDB 的調(diào)試命令是 Xcode 可視化調(diào)試的底層支撐匙睹,所以這樣類似九陰真經(jīng)的東西愚屁,我們還是有必要了解一下的。
Preview
首先讓我們先預(yù)覽以下我們學(xué)完之后可以做什么痕檬,例如我們有下面這樣一個例子:當(dāng)按鈕按下時霎槐,隨機(jī)生成r、g谆棺、b 值, 當(dāng) r 為奇數(shù)的時候生成 view栽燕,并使用 r,g,b 的值設(shè)置了一個 view 的 frame, 并在每次點(diǎn)擊的時候都更改 view 的 tintColor 屬性罕袋。
現(xiàn)有如下需求,我們需要在調(diào)試的時候知道:
- 按鈕按下幾次的時候創(chuàng)建了 view
- 被我們創(chuàng)建的 view 有多大
- 當(dāng)前 view.tintColor 值是多少
這時候我們只要在如圖位置打兩個斷點(diǎn)
按下 Command + E + LeftClick
對斷點(diǎn)進(jìn)行如下編輯
Command + R
運(yùn)行碍岔,按幾次按鈕來觸發(fā)斷點(diǎn)浴讯,我們能看到 Output窗口正輸出按下的次數(shù),第一個斷點(diǎn)并不觸發(fā)蔼啦,當(dāng) maskView 創(chuàng)建成功時第二個斷點(diǎn)被觸發(fā)榆纽,此時 Output 輸出了按下次數(shù) $runnumber, frame, tintColor。
(int) $0 = 0
(int) $runnumber = 1
maskView frame is {{0, 197}, {116, 72}}, tint color is UIDeviceRGBColorSpace 0.772549 0.454902 0.282353 1
至此調(diào)試結(jié)束捏肢,是不是感覺很簡單奈籽,但如果我們不用 LLDB 命令調(diào)試,我們至少要進(jìn)行以下幾個步驟:
- 要在全局聲明一個變量來記錄按下次數(shù)鸵赫。
- 由于 tintColor 屬性變量在調(diào)試窗口不可見衣屏,要添加一個 NSLog 打印 tintColor 的值。
- 調(diào)試之后我們要刪除添加添加代碼辩棒。
而使用 LLDB 命令與 Xcode 可視化共同協(xié)作之后狼忱,調(diào)試變的很靈活,我們可以
- 使用 Condition 中修改觸發(fā)條件
- 使用 Ingore 來調(diào)整斷點(diǎn)忽略次數(shù)
- 使用 Action 添加命令一睁,進(jìn)行變量的聲明钻弄,計(jì)算,輸出等者吁。
- 使用 添加編輯斷點(diǎn)的方法窘俺,替代添加、編輯測試代碼复凳。
- 使用 禁用瘤泪、刪除斷點(diǎn)的方法代替,刪除測試代碼染坯,有效防止臟代碼的發(fā)生均芽。
怎么樣心動了沒,從下一節(jié)開始单鹿,讓我們一起來學(xué)習(xí) LLDB 調(diào)試命令吧~