Symbolic Breakpoint

2017-07-11  本文已影响0人  sharpdev

开发中常见的一类崩溃错误是遇到:unrecognized selector sent to instance 0xaxxxx…而backtrace又无法明确说明错误在哪行代码,如何快速定位BUG呢?

有时读代码一下很难找到是哪个instance出的问题,这时定制有效的DEBUG断点是最好的办法,方法如下:

在Debug菜单中选择 Breakpoints -> Create Symbolic Breakpoint
在Symbol中填写如下方法签名:

-[NSObject(NSObject) doesNotRecognizeSelector:]

然后再运行复现错误时断点会停在真正导致崩溃的地方。

Symbolic Beakpoint 功能很强大, 具体的设置可以添加时进行设置, 也可以添加后, 在断点浏览面板(Command + 7)进行设置.

Symbol:
触发断点的函数

Module:
模块筛选。可以避免不同库中方法名或者函数名相同。

Condition
触发条件。这里可以添加一些指定触发条件,比如添加第一个参数不能为nil。这里$arg3代表第1个参数,$arg4代表第2个参数,以此类推。这里也可以调用方法来判断,但必须是类方法,并且返回值必须为BOOL类型。

样例:找出给[UIImage imageNamed:]传nil的代码。这里就需要设置Symbol为[UIImage imageNamed:],然后Condition设置为$arg3 == nil。这样在运行中如果遇到传nil就会触发断点。

Action
触发活动。这里是当断点触发后要执行的动作,可以添加多条,执行的顺序是从上到下。一共有6种可执行类型。

上一篇 下一篇

猜你喜欢

热点阅读