iOS实际开发中,我们经常会用到断点调试,一般很多使用的只是简单功能。这里介绍几个你可能需要知道的小技巧,会提升你的调试效率。
一、条件语句Condition的使用
使用场景:有个公共方法funcComon(),可能被多处调用(比如被A、B、C、D...),其实我们只想知道在被C调用时,funcComon()的数据,此时就可以用Condition了。
下面我模拟个例子,比如有个循环,我想知道第10次调用时的数据,我就可以在Condition里写上 条件语句 i == 10,满足该条件时,断点才生效。
当然还有笨办法,不在断点里加,直接写个if(i==10)的代码判断语句。综合对比还是直接在断点里加Condition 更方便。
二、Action的使用
Action是指触发断点时,你还想执行哪些附加操作:
Debugger Command
1、使用较多的就是控制台打印变量信息,如图
2、改变数据,满足指定条件,方便调试,通过lldb 的 expression 命令
本来方法调用方传来的是“张三”,通过expression 修改,最后变为 李四。
三、全局符号断点
当执行到对应的函数名时,就会触发,有多个相同的方法名,就会对应的触发。
使用场景,工程结构比较复杂,分的bunddle比较多,调用关系比较复杂,但是我知道最后的调用方法为funA(),想知道调用栈,就可以使用全局符号断点。
符号断点使用时,要注意一下几点:
1、方法名不带参数、带参数、带多个参数时,空格和分号要使用正确
注意动态方法开头用“-”,静态方法开头用“+”
-[UIViewController viewDidLoad]
-[UIView addSubview:]
-[UIViewController dismissViewControllerAnimated:completion:]
2、属性的调试技巧,一般都是用setXXX
-[UILabel setNumberOfLines:]
3、通过lldb获取对应的信息
po $arg1 //对象本身,调用的类
po (SEL)$arg2 //是方法第二个参数也就是 SEL
po $arg3 //第一个参数
参考
iOS 断点调试
最全面的 iOS 断点调试
Xcode symbolic breakpoints - Break at method call