美文网首页
调试僵尸对象(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