描述
在使用异常断点发现,项目crash的位置在main函数中,提示thread 1:exc_bad_access(code=1,adress=0x10)
,然后设置Product->Scheme->Edit Scheme->Run ???.app右边的选项中,选中Enable Zombie Objects,后断点在汇编语法中,提示thread 1:exc_breakpoint(code=1,subcode=0x189a6clcc)
解决方法
由于勾选了Enable Zombie Objects
,虽然出现断点,但是没有打印信息,切换到Tab Aguments 配置环境变量MallocStackLoggingNoCompact
,NSZombieEnabled
,MallocStackLogging
; 注意:这时候需要在模拟器中运行app,重现刚刚的crash过程。你会发现在控制台中输出一些数据,最起码有message sent to deallocated instance 0x7fbc1b52bc00
;在我的项目中 ,打印出***** -[XYHStoreDetailViewController respondsToSelector:]: message sent to deallocated instance 0x7fbc1b52bc00**
拿到了这个指针之后,在终端中输入 malloc_history 40888 0x7fbc1b52bc00 |grep 0x7fbc1b52bc00
,注意这个40888是当前进程的id,这个方法是这篇博客介绍的, 但是我在执行时,提示40888这个进程没有运行,说明每个电脑的进程id可能不一样。提示
malloc_history cannot examine process 40888 (with name like '40888') because it no longer appears to be running.
如果不知道当前进程id怎么办呢,我是根据打印出来的信息去解决的[XYHStoreDetailViewController respondsToSelector:]
;在我的项目中,我找到这个类,这是我触发crash方法的类,然后找对事件处理的方法,发现我是在一个被释放的对象中调用了一个对象,从新修改代码,然后发现问题就解决了
网友评论