EXC_BAD_ACCESS

769 阅读1分钟

报错

EXC_BAD_ACCESS

EXC: exception 异常

BAD_ACCESS: 不能访问

原因

向一个已经释放的对象发送消息

解决办法

用僵尸对象找到造成错误的野指针代码

什么是僵尸对象

僵尸对象是用于捕捉内存错误的调试功能。

NSZombieEnabled

NSZombieEnabled是一个环境变量,可以控制 Core Foundation 的运行时是否将使用僵尸对象。在发布的构建包中一定要禁用 NSZombieEnabled。

开启Xcode僵尸模式 ( NSZombieEnabled )

Product -> Scheme -> Edit Scheme -> Diagnostics -> 勾选Zombie Objects

Product -> Scheme -> Edit Scheme -> Arguments设置NSZombieEnabled、MallocStackLoggingNoCompact两个变量,且值均为YES。

仅设置Zombie Objects的话,如果Crash发生在当前调用栈,系统可以把崩溃原因定位到具体代码中;但是如果Crash不是发生在当前调用栈,系统仅仅告知崩溃地址,所以我们需要添加变量MallocStackLoggingNoCompact,让Xcode记录每个地址alloc的历史,然后通过命令将地址还原出来。

参考

blog.csdn.net/Nathan1987_…