[斷點除錯好助手]LLDB除錯
阿新 • • 發佈:2019-02-14
初學者剛入門一般都不認識有這一除錯工具,學習成本不高,你只要嘗試在除錯中開始使用偵錯程式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的堆疊。