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

 

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

 

转载于:https://www.cnblogs.com/zxykit/p/5276130.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值