iOS开发之lldb调试命令

首先声明一点,这是把之前混合的博客内容,又进行了单独整理,望大家多多包含......

开发过程中,我们难免需要断点调试,但是断点调试之后,我们想知道一些对象信息或者堆栈信息,应该怎么办?相信断点调试过的开发者都知道,断点执行后,会在输出框内出现(lldb)这样的字眼,此时,我们就需要相关的调试命令,然后输出我们想要的内容了,现在就开始简单的介绍一下吧!

1、po命令

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

比如:你想知道一个视图包含了哪些子视图,你可以通过for循环的方式打印出来子视图,但是下面的只需一个命令就可解决,输出视图层级关系(这是一个被隐藏的命令):

po [[self view] recursiveDescription]

再比如:你想打印一个model,直接用NSLog或po对象,结果是model的地址,这并不是我们想要的,那么如何解决呢? 

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

2、p命令

可以用来打印基本数据类型

3、call命令

执行一段代码,比如:

call NSLog(@"%@",@"yang")

4、expr命令

动态执行指定表达式,比如:

expr i = 101

输出:(int)$0 = 101

5、bt命令

打印当前线程堆栈信息,比如:

//打印所有线程堆栈信息
bt all

6、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

这个时候我们如果怀疑出错的地址是0x0000000104c25550,那么我们可以使用下面命令找出错误代码的位置:

image lookup --address 0x0000000104c25550

//执行命令后,输出结果:
Address: BGMultimediaDemo[0x0000000100001550] (BGMultimediaDemo.__TEXT.__text + 192)
Summary: BGMultimediaDemo`-[ViewController viewDidLoad] + 192 at ViewController.m:30

从上面的结果可以看出,错误位置在ViewController.m中的第30行。哇,好神奇啊!

之前博客内容:

iOS开发之Xcode常用调试(Debug)技巧总结_hbblzjy的博客-CSDN博客

iOS开发之如何在Xcode中显示断点堆栈_hbblzjy的博客-CSDN博客

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hbblzjy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值