1. 程式人生 > >[斷點除錯好助手]LLDB除錯

[斷點除錯好助手]LLDB除錯

初學者剛入門一般都不認識有這一除錯工具,學習成本不高,你只要嘗試在除錯中開始使用偵錯程式LLDB,你會馬上感受到偵錯程式給你帶來的便利。LLDB是LLVM下的偵錯程式。Xcode從4.0開始編譯器開始改用LLVM,相應的偵錯程式也從gdb改為LLDB。而從 Xcode5.0開始所有工程也被自動設定為使用LLDB。

這裡借鑑整理了一下別人的blog,作為學習筆記記錄供各位參考

使用方法

  • 先在需要除錯的地方進行打斷點,然後執行程式,停止在斷電處後…會出現(lldb)字樣(在NSLog顯示資訊的位置(除錯框內),單擊後便可以輸入…)
  • 輸入命令進行操作

常用命令:

po

  • po [self view] 隨後偵錯程式會輸出這個 object 的 description。
  • 在這個例子中可能是這樣的資訊:
(lldb) po [self view]
- (UIView *) $1 = 0x0824c800 <UITableView: 0x824c800; frame = (0 20; 768 1004); clipsToBounds = YES; autoresize = W+H; gestureRecognizers = <NSArray: 0x74c3010>; layer = <CALayer: 0x74c2710>; contentOffset: {0, 0}>
  • p (int)[[[self view] subviews] count]
(lldb) po $1
(UIView *) $1 = 0x0824c800 <UITableView: 0x824c800; frame = (0 20; 768 1004); clipsToBounds = YES; autoresize = W+H; gestureRecognizers = <NSArray: 0x74c3010>; layer = <CALayer: 0x74c2710>; contentOffset: {0, 0}>

expr

修改值

int i = 2;
(--斷點在此)
NSLog(@"i = %@",i);
(lldb) expr i=2

你會看到如下的輸出:

(int) $0 = 2

繼續執行程式,程式輸出的資訊是:

i = 2

變數a的值被改變
除此之外,還可以使用這個命令新宣告一個變數物件,如:

expr int $b=2
p $b

call

call
call即是呼叫的意思。其實上述的po和p也有呼叫的功能。因此一般只在不需要顯示輸出,或是方法無返回值時使用call。 和上面的命令一樣,我們依然在viewDidLoad:裡面設定斷點,然後在程式中斷的時候輸入下面的命令:

call [self.view setBackgroundColor:[UIColor redColor]]

執行程式,view的背景顏色變成紅色了!

bt

列印呼叫堆疊,加all可列印所有thread的堆疊。