美文网首页
调试僵尸对象(EXC_BAD_ACCESS)

调试僵尸对象(EXC_BAD_ACCESS)

作者: 梦里桃花舞倾城 | 来源:发表于2019-04-25 14:10 被阅读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命令,查找到一些调用信息

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

  • 先打开DebugConsoleView界面,让Xcode在调试的时候输出更多的信息:菜单XCode -> Preferences
3.png
  • 和选择僵尸对象一样,选中Malloc Stack Product ->Scheme ->Edit Scheme -> Diagnostics -> Malloc Stack
4.png
  • 打开活动监视器找到到模拟器上运行的应用的PID
    5.png

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

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

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

sudo malloc_history 273 0x7f906ca34790

相关文章

网友评论

      本文标题:调试僵尸对象(EXC_BAD_ACCESS)

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