zoukankan      html  css  js  c++  java
  • 如何检测野指针

        野指针又叫悬挂指针(Dangling Pointer)就是当指针指向的对象已经释放或回收后,但没有对指针做任何修改(一般来说,将它指向空指针),而是仍然指向原来已经回收的地址。如果指针指向的对象已经释放,但仍然使用,那么就会导致程序crash。

       一般来说,出现EXC_BAD_ACCESS错误的原因都是悬挂指针导致的,但具体是哪个指针是悬挂指针还不确定,因为控制台并没有给出具体crash信息。

    要想得到更多的crash信息,你需要启动NSZombieEnabled。具体步骤如下:

    1.选中Edit Scheme,并点击:

    2.Run -> Diagnostics -> Enable Zombie Objects:

    3设置完之后,再次运行和点击悬挂指针,虽然会再次crash,但这次控制台打印了以下有用信息:

    信息message sent to deallocated instance 0x7fe19b081760大意是向一个已释放对象发送信息,也就是已释放对象还调用某个方法。现在我们大概知道什么原因导致程序会crash,但是具体哪个对象被释放还仍然使用呢?

     点击继续运行

    留意上面的两个红色框,它们两个地址是一样,而且PollingWebViewController前面有个_NSZombie_修饰符,说明dataSource对象被释放还仍然使用。

    找到前边带_NSZombie_的对象就是被释放还仍然使用的对象.

  • 相关阅读:
    NoSuchMethodError: Closure call with mismatched arguments:
    pod reopened update慢
    Flutter ListView 不满屏 无法滚动
    三分钟告诉你MBR和GPT的区别,选择适合自己的
    centos8 安装VMware,之后不能启动问题处理
    Docker学习之路
    JavaScript 编程语言
    工具
    Java开发
    Oracle的学习
  • 原文地址:https://www.cnblogs.com/duzhaoquan/p/8609715.html
Copyright © 2011-2022 走看看