常用LLDB调试命令

256 阅读2分钟
image命令
//模拟代码
NSArray *arr = @[@"0",@"1",@"2"];
NSLog(@"%@",arr[3]);
 
//此时,会输出错误信息
*** 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

输入LLDB命令: image lookup --address 0x0000000104c25550

输出:

Address: BGMultimediaDemo[0x0000000100001550] (BGMultimediaDemo.__TEXT.__text + 192)
Summary: BGMultimediaDemo`-[ViewController viewDidLoad] + 192 at ViewController.m:30
bt命令
//打印所有线程堆栈信息
bt all
po命令

print object的缩写,表示显示对象的文本描述,如果对象不存在,则打印为nil;

应用1:输出视图层级关系

po [[self view] recursiveDescription]

应用2:打印一个model的内容

重写model里面的description方法,但是,如果model的属性非常多,这就不适用了。因为你不可能说在description方法里拼接属性返回,这样不仅麻烦,而且可读性非常差。所以,我们可以利用runtime动态获取属性并返回。推荐你重写debugDescription方法,因为两个方法效果一样,区别在于debug方法是在你使用po命令时调用的,实际上也是调用了description方法

p命令

打印基本数据类型