Xcode Instruments提供了各种各样的工具用来定位APP的各种稳定性问题。这里简单总结几个问题:

1. 内存泄漏

Xcode->Open Developer Tools->Instruments->Leak,打开后点击运行。执行测试流程后,如果没有内存泄漏,则Leak工具显示的是√,如果有泄漏,则显示×。

这时候选中×的区域,则Leaks栏选择Call Tree,选中"Invert Call Tree", "Hide System Libraries",即可显示泄漏的堆栈。如果没有显示符号堆栈,则检查Product->Scheme->Edit Scheme,看目前是否是Debug状态,同时查看项目的Build Settings->Debug Information Format,看是否是DWARF with dSYM File,该文件主要是一些符号信息。如果还是不显示堆栈,可以点击File->Symbols手动选择Symbol的路径。

定位内存泄漏是一回事,还要分析为什么会出现内存泄漏,是调用者调用的问题,还是类设计者设计存在问题,比如没有遵循谁申请谁释放的原则。

2. 内存越界

内存越界往往会造成一些匪夷所思的crash。Xcode可以按如下方法来检测内存越界:

a, Debug->Breakpoints->Create Symbolic Breakpoints, Symbols输入malloc_error_break;

b, Product->Scheme->Edit Scheme,选中Memory Management中的Malloc Scribble, Malloc Guard Edges, Guard Malloc, Zombie Objects. With that, run your application again, and Xcode will stop at the line causing the problem.

Instruments提供了Zombies工具,该工具会记录每个被释放的内存块,当再次访问该内存块时,Xcode会直接提示出现问题的调用堆栈。

3. 高CPU占用

有时候APP很卡,原因是CPU过载,有些线程过度使用了CPU。高CPU占用有两个危害,一个是坏的用户体验,另外一个是ios系统会将连续一段时间高频使用CPU的APP直接杀死。使用Instruments中的time profile即可定位。Xcode->Open Developer Tools->Instruments->time profiler,打开后点击运行。执行测试流程后,CPU占用率显示曲线,横轴是时间,纵轴是CPU使用率。这时候鼠标选中使用率高的区域,界面就会显示使用率高的线程调用,及函数调用。

这个时候就要分析为什么这些函数耗费了过多的CPU,有些函数本身就耗费很多CPU,比如写磁盘,读网络数据等IO操作;有时候是一些程序写法存在问题。比如最近发现的主APP中两个高CPU占用的问题:

a, 音视频数据队列采用了vector实现,而且每来一个数据,执行的是push_front,而不是push_back,造成CPU利用率隔一段时间就出现一个尖峰,是vector在执行realloc和copy操作,改为std::list后不再出现。

b, 读取音视频队列的关键线程加进了一些无意义的查询数据语句,每读一个数据包查询一次,白白浪费了很多CPU。

还有一些APP卡顿是GPU过载,需要使用Core Animation定位。除了以上几个工具,Energy Log用来分析电量,Network用来进行流量分析。

使用Xcode Instruments定位APP稳定性问题的更多相关文章

  1. iOS App稳定性指标及监测

    一个App的稳定性,主要决定于整体的系统架构设计,同时也不可忽略编程的细节,正所谓"千里之堤,溃于蚁穴",一旦考虑不周,看似无关紧要的代码片段可能会带来整体软件系统的崩溃.尤其因为 ...

  2. 如何使用Instruments诊断App(Swift版):起步-b

    无论你写过许多iOS应用,还是刚刚开始你的第一个应用,毫无疑问,你都会想出一些新点子,或者想去弄明白你该怎么做,来让你的app变得更好. 除去添加新特性来优化你的应用,有一件事是所有好的开发者都回去做 ...

  3. [转]使用Xcode 4发布App 实例操作

    使用xcode 4发布app 实例操作是本文介绍的内容,不多说,我们直接进入话题. 1.iOS Provisioning Portal 和iTunes Connect 没有变,下载与安装.mobile ...

  4. Monkey Android app稳定性测试工具之Monkey使用教程

    Monkey Android app稳定性测试工具之Monkey使用教程 by:授客 QQ:1033553122 由于篇幅问题,仅提供百度网盘下载链接: Android app稳定性测试工具之Monk ...

  5. Xcode 7提示App Transport Security has blocked a cleartext HTTP (http://) resource load的解决办法

    Xcode 7提示App Transport Security has blocked a cleartext HTTP (http://) resource load的解决办法   今天使用Xcod ...

  6. APP稳定性测试

    APP稳定性测试-monkey测试     第一篇-App稳定性测试-Monkey(基本操作) 准备工作 1.首先下载好adb工具 2.使用数据线连接电脑,打开usb调试 3.使用win+R打开运行, ...

  7. Xcode使用介绍之一:Xcode简介+创建App应用

    一.Xcode简介 Xcode是苹果官方的集成开发环境IDE,开发者可以使用其开发基于iPhone,iPad,Apple Watch以及Mac平台的应用.Xcode具有如下特点: 一站式开发工具.所有 ...

  8. [xcode]instruments来检验你的app

      原文网址:http://www.cocoachina.com/industry/20140114/7696.html     比较了好多关于instruments 还是发现老外写的比较牛逼.于是果 ...

  9. 使用Xcode Instruments Leak解决内存泄漏问题

    iOS 5.0之后apple引入了Xcode编译器特性ARC(Automatic Reference Counting,自动引用计数)来帮助开发者管理内存,但为了追求app的高性能与减少安装包大小,工 ...

随机推荐

  1. 《剑指offer》链表专题 (牛客10.23)

    难度 题目 知识点 03. 返回链表的反序 vector 递归,C++ STL reverse() * 14. 链表中倒数第k个结点 指针操作 15. 反转链表 头插法,递归 16. 合并两个有序链表 ...

  2. FMZ发明者量化平台回测机制说明

    原文连接:https://www.fmz.com/digest-topic/4009 大部分策略在实盘之前都需要回测进行验证,FMZ支持部分品种数字货币现货.期货和永续合约,以及商品期货所有品种.但发 ...

  3. gradle中 使用lombok

    plugins {     id 'java'     id "io.franzbecker.gradle-lombok" version "3.1.0"    ...

  4. navicat破解版的下载与激活

    原文链接:http://www.cnblogs.com/djwhome/p/9289295.html 以前一直使用的老版的破解版的navicat,但是最近老是报错 而且连接还特别慢,今天终于不忙了额, ...

  5. Design Compressed String Iterator

    Design and implement a data structure for a compressed string iterator. It should support the follow ...

  6. 关于keepalived执行后日志狂刷IPVS: Can't initialize ipvs: Protocol not available的问题

    安装了keepalived+lvs,达到了高可用的负载均衡,但是今天再启用的时候发现keepalived不正常,通过 /var/log/messages 查看系统日志发现狂刷 IPVS: Can't ...

  7. 小菜鸟之liunx

    目录 第一章:Linux简介 1 Linux特点 1 CentOS 1 第二章:Linux安装 2 Linux目录结构 2 第三章:Linux常用命令 2 Linux命令的分类 3 操作文件或目录常用 ...

  8. DP_Milking Time

    Bessie is such a hard-working cow. In fact, she is so focused on maximizing her productivity that sh ...

  9. CSP/NOIP c++常用模板

    蒟蒻目前还是提高组选手,模板将会持续更新! 目录: 线段树 对拍 exgcd st 树状数组 树剖 dijsktra spfa tarjan 匈牙利 埃筛 差分树状数组 dinic 快速幂取余 Exg ...

  10. LRU算法简介

    LRU是什么? 按照英文的直接原义就是Least Recently Used,最近最久未使用法,它是按照一个非常注明的计算机操作系统基础理论得来的:最近使用的页面数据会在未来一段时期内仍然被使用,已经 ...