断点调试是遇到问题时的必用套路,但是很多时候,普通断点并不能满足需求,下面简单介绍两种更好用的断点。
1、条件断点
当我们需要在循环里加断点,并针对满足某种条件的一些迭代时,如果用普通断点,就得不停地“Continue program execution”,直至等到目标迭代,这样的做法显然太低效了。那么来看看条件断点是怎么玩的:
2、符号断点
**** 当我们需要调试的代码是在框架的实现文件里时,普通断点根本没法添加,因为框架的实现文件是不可见的。这时候就需要用到符号断点了,例如对于一些无法重现的crash,可以添加一个抛异常函数objc_exception_throw的符号断点来守株待兔:
这样,当发生crash,就可以拿到具体的堆栈了。不过,符号断点没法预先和特定的业务代码绑定,例如objc_exception_throw是所有业务模块抛异常都会调用的。