zoukankan      html  css  js  c++  java
  • 记一次高级调试错误(附高级调试方法)

    1.BUG现象:

    问题描述:返回一个UIColor对象时报错,[UIColor redColor]时不报错,[UIColor colorWithRGB]时报错,编译器不报告具体问题,不报告具体位置,仅仅显示EXC_BAD_ACCESS(code=EXC_I386_GPFLT)

    初步推测:一个内存引用计数为1的对象被release了两次,机制不明,原因不明

    2.排查方法

    1)在图示位置添加  MallocStackLoggingNoCompact    NSZombieEnabled   MallocStackLogging  三个环境变量并设置值为YES

    2)再次运行程序,点击到BUG点,IDE会输出下面这个字段

    其中0x7ffbc2697820为当前出现BUG的内存地址,我们需要查看该地址的malloc history

    3)在活动监视器里找到当前程序的PID(28456)

    4)现在,我们得到了两个主要的信息:

    进程ID:28456

    崩溃地址:0x7ffbc2697820

    打开终端,输入(格式:malloc_history PID 内存地址)

    malloc_history 28456 0x7ffbc2697820

     

    5)终端显示

     

     

    6)根据最后执行的方法,推断出是属性问题,即

    assign不能用来修饰非基本类型,改为strong

     

  • 相关阅读:
    Map-HashMap
    Collection(List & Set)
    Redis五种数据类型详解
    Redis基本数据结构详解
    分布式Session管理
    一致性算法
    Zookeeper
    分布式锁
    线程池原理解析
    疑点难点1.1
  • 原文地址:https://www.cnblogs.com/zxykit/p/5276130.html
Copyright © 2011-2022 走看看