调试僵尸对象(EXC_BAD_ACCESS)

2019-04-25  本文已影响0人  梦里桃花舞倾城

针对EXC_BAD_ACCESS这种主要就是内存错误。

Thread 1: EXC_BAD_ACCESS (code=1, address=0x72cb278c0)

如何调试

1.全局断点调试

用全局断点,看是否可以定位到错误的位置。如图设置一下就OK了。有的时候是可以直接定位到出错的代码位置。

1.png

2.僵尸对象调试(Zombie Objects

如何开启

在Xcode中设置Product ->Scheme ->Edit Scheme -> Diagnostics -> Zombie Objects

2.png

这样一般在控制台都可以打印出是那个对象导致的。

例如:

-[UIView retain]: message sent to deallocated instance 0x7f906ca34790

但是这只给出了使用了已经被释放的UIView内存地址,但具体的UIview是哪个UIView却无法知道。

这时候可以使用OSXmalloc_history命令,查找到一些调用信息

注意必须在模拟器上运行:

3.png 4.png

这样PID和内存地址(0x7f906ca34790)都有了(-[UIView retain]: message sent to deallocated instance 0x7f906ca34790)

最后一步打开终端输入:(pid:273是我随便找的一个,这里应该是Xcode项目的PID)所有的堆栈信息都会打印出来了。

再次声明必须在模拟器上运行:

sudo malloc_history 273 0x7f906ca34790

上一篇下一篇

猜你喜欢

热点阅读