美文网首页
453,如何调试BAD_ACCESS错误(面试点:Enable

453,如何调试BAD_ACCESS错误(面试点:Enable

作者: 枫叶1234 | 来源:发表于2021-02-19 08:27 被阅读0次

经过上面的真机调试之后,发现我们的程序崩在了一个方法里,并且报错 “Thread 1:EXC_BAD_ACCESS(code=1,address=0x4000)”,这种错误通常是内存管理的问题,一般是访问了已经释放的对象导致的,可以开启僵尸对象(Zombie Objects)来定位问题。

第一步:还是打开Xcode 选择屏幕左上角Xcode-> PReferencese,不过我们这次是要设置一下输出信息,调试的时候输出更多的信息,如下截图,勾上:

image.png

第二步:再对环境变量进行设置:菜单Product > Scheme > Edit Scheme

把红色圈里面的三个选项都勾上

image.png

开启该选项后,程序在运行时,如果访问了已经释放的对象,则会给出较准确的定位信息,可以帮助确定问题所在。

该功能的原理是,在对象释放(retainCount为0)时,使用一个内置的Zombie对象,替代原来被释放的对象。无论向该对象发送什么消息(函数调用),都会触发异常,抛出调试信息。

记得在问题被修复后,关闭该功能!!

第三步:设置好后调试程序,在输出界面发现了-[CFString retain]: message sent to deallocated instance错误日志

到这里,就已经很明显看出来是什么原因导致程序崩溃的了,然后再去分析代码,静下心来肯定能解决问题的了。

我这里是因为向一个空的NSString类型发送消息导致崩溃的,但是这个问题只在iOS9版本崩溃,iOS10就没问题,这个还值得深究。

相关文章

网友评论

      本文标题:453,如何调试BAD_ACCESS错误(面试点:Enable

      本文链接:https://www.haomeiwen.com/subject/iorstltx.html