Xcode調(diào)試技巧之:LLDB
Xcode調(diào)試技巧之:LLDB
1.輸出視圖層級(jí)關(guān)系(這是一個(gè)被隱藏的命令):
po [[self view] recursiveDescription]
2.輸出對(duì)象的屬性,重寫debugDescription,可以利用runtime動(dòng)態(tài)獲取屬性并返回
3.call:執(zhí)行一段代碼
call NSLog(@"%@", @"yang")
4、expr:動(dòng)態(tài)執(zhí)行指定表達(dá)式
expr i = 101
輸出:(int)$0 = 101
5、bt:打印當(dāng)前線程堆棧信息
bt all
6、image:常用來(lái)尋找棧地址對(duì)應(yīng)代碼位置:
舉個(gè)例子:
應(yīng)用場(chǎng)景(數(shù)組越界)模擬代碼:
NSArray *array = @[@"yang",@"she",@"bing"];
NSLog(@"%@",array[3]);
錯(cuò)誤信息如下:
*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayI objectAtIndex:]: index 3 beyond bounds [0 .. 2]'
*** First throw call stack:
(
0 CoreFoundation 0x000000010579734b __exceptionPreprocess + 171
1 libobjc.A.dylib 0x00000001051f821e objc_exception_throw + 48
2 CoreFoundation 0x00000001056d1eeb -[__NSArrayI objectAtIndex:] + 155
3 BGMultimediaDemo 0x0000000104c25550 -[ViewController viewDidLoad] + 192
4 UIKit 0x0000000105d5c06d -[UIViewController loadViewIfRequired] + 1258
......
......
......
21 BGMultimediaDemo 0x0000000104c25adf main + 111
22 libdyld.dylib 0x000000010857268d start + 1
23 ??? 0x0000000000000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
這個(gè)時(shí)候我們?nèi)绻麘岩沙鲥e(cuò)的地址是0x0000000104c25550,那么我們可以使用下面命令來(lái)找出錯(cuò)誤代碼的位置:
image lookup --address 0x0000000104c25550
執(zhí)行命令后輸出結(jié)果如下:
Address: BGMultimediaDemo[0x0000000100001550] (BGMultimediaDemo.__TEXT.__text + 192)
Summary: BGMultimediaDemo`-[ViewController viewDidLoad] + 192 at ViewController.m:30
從上面輸出結(jié)果中可以看出,錯(cuò)誤位置應(yīng)該是ViewController.m文件中的30行。是不是超級(jí)好用?反正我覺(jué)得好用。