iOS 调试及内存分析基本技巧

作者: 远方的枫叶 | 来源:发表于2016-06-15 16:47 被阅读1619次
  1. 在运行过程中,如果出现EXC_BAD_ACCESS 异常,往往提示的信息很少或者没有提示,启用NSZombieEnabled后在控制台能打印出更多的提示信息,便于debug,请注意,僵尸模式下的调试工作只能在模拟器中实现,我们无法在物理设备上完成这一诊断流程。


    启用僵尸对象.jpg
  2. 异常断点,一般程序crash时Xcode一般会定位到main函数中,得不到详细的crash信息,打上异常断点后就极大可能定位到程序的crash处,利于debug。


    {异常断点.jpg
  3. 一般来说,在创建工程的时候,应该在Build Settings启用Analyze During 'Build',这样每次编译时都会自动静态分析。这样的话,写完一小段代码之后,就马上知道是否存在内存泄露或其他bug问题,并且可以修bugs。当然你也可以直接长安运行程序按钮,在弹出框中选择analyze,也可以进行静态分析。


    启动静态分析1.jpg
    静态分析2.jpg
  4. 如果你想在运行的时候查看APP是否存在内存泄露,你可以使用Xcode上instruments工具上的Leaks模块进行内存分析。但是有些内存泄露是很难检查出来,有时只有通过手动覆盖dealloc方法,看它最终有没有调用。
    长按运行按钮,在弹出框中选择profile会自动弹出Instruments程序,选择leaks模块进入leaks图所示界面,此时左上角第二个红框的内容会自动填充,其他的按框操作,然后点击左上角第一个框的红色圆点按钮开始检测APP内存,这时会在模拟器(或真机上,如果你的target是真机的话)上启动程序,然后操作你的程序,观察leaks一行有没有出现红色的类似于田字的叉,如果有说明内存泄露了,点击红叉,在下面callTree中查看具体内存泄露的地方,双击便可定位到泄露内存的代码的地方,如果你觉得在控制台不好改程序,可以点击右上角的xcode标识,就会在xcode中定位到对应的代码。


    Instruments.jpg
    leaks.jpg

相关文章

网友评论

  • Cyyyyyyyy:NSZombieEnabled以后程序的内存实时监控就看不到了,想看内存数据还得关掉NSZombieEnabled。
    远方的枫叶:@民哥 恩,并且上线打包的时候要确保关掉,否则会影响上线
    民哥:是的, 想要直接看内存占用要关掉僵尸
    远方的枫叶:@我是Cy 开始僵尸就是为了暂时保留已经不存在的对象,以便发现问题进行debug

本文标题:iOS 调试及内存分析基本技巧

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