记一次高级调试错误(附高级调试方法)

 

1.BUG现象:

 

问题描述:返回一个UIColor对象时报错,[UIColor redColor]时不报错,[UIColor colorWithRGB]时报错,编译器不报告具体问题,不报告具体位置,仅仅显示EXC_BAD_ACCESS(code=EXC_I386_GPFLT)

初步推测:一个内存引用计数为1的对象被release了两次,机制不明,原因不明

 

 

2.排查方法

1)在图示位置添加  MallocStackLoggingNoCompact    NSZombieEnabled   MallocStackLogging  三个环境变量并设置值为YES

 

 

 

 

2)再次运行程序,点击到BUG点,IDE会输出下面这个字段

其中0x7ffbc2697820为当前出现BUG的内存地址,我们需要查看该地址的malloc history

 

3)在活动监视器里找到当前程序的PID(28456)

 

4)现在,我们得到了两个主要的信息:

进程ID:28456

崩溃地址:0x7ffbc2697820

打开终端,输入(格式:malloc_history PID 内存地址)

malloc_history 28456 0x7ffbc2697820

 

5)终端显示

 

 

6)根据最后执行的方法,推断出是属性问题,即

assign不能用来修饰非基本类型,改为strong

 

posted @ 2016-03-14 16:21  抓狂的ZXY  阅读(249)  评论(0编辑  收藏  举报