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. Windows下获取CPU频率

    一直想在Windows下取得CPU的时钟速度,找了好久终于找到了函数CallNtPowerInformation,要想使用它,首先必须包含powrprof.h头文件和链接库powerprof.lib. ...

  2. Odoo13 新变化:存货核算

    Odoo13将于2019年10月发布,本次发布也包含了大量的改进,例如,对存货核算的重构. 去掉了 产品历史价格product.price.history ,增加了 stock valuation l ...

  3. sql语句 两表关联查询计算数量

    select sum(a1.`num`)   from `order_orderlistrow` as a1 INNER JOIN `order_orderlist` as a2 on a1.`ord ...

  4. 用java转换文件的字符集

    中文乱码真的是让人很头疼问题,有了这个方法应该能缓解这种头疼,用的是递归方式查找文件,直接在原文件中修改,小心使用(在本地测试效果有点诡异呀,没有达到预期效果). package com.hy.uti ...

  5. EasyUI datagrid 动态加载表头和数据

    首先返回到页面的需要是JSON数据: 第一步: 遍历表头,插入到array中 for (var i = 0; i < jsonObj.title.length; i++) { //把返回的数据封 ...

  6. (一)使用 mybatis 的缘由

    目录 传统代码操作数据库的存在的问题 mybatis 的解决之道 传统代码操作数据库的存在的问题 数据库连接,在使用数据库时,创建数据库连接,在不用的时候,就会立即释放掉连接:这样当下次使用的又会创建 ...

  7. Docker pull 出现的 error pulling image configuration: Get https://dseasb33srnrn.cloudfront.net/

    vim /etc/sysconfig/docker OPTIONS='--selinux-enabled --log-driver=journald --signature-verification= ...

  8. nginx反向代理服务器以及负载均衡,从安装到配置

    nginx的具体作用不用细说,很强大,做负载均衡.反向代理服务器解决前端跨域问题等等.下面是nginx的安装过程 首先nginx主要的依赖: pcre. pcre-devel zlib zlib-de ...

  9. 使用Harbor搭建Docker私有仓库

    ip:192.168.0.145 环境设置 防火墙,selinux等,可以使用本章开头的那个shell脚本 其他主机的hosts文件也都添加上 ip hub.aaa.com windows系统的hos ...

  10. C#数字前补0

    [TestMethod] public void Test8() { ; string b = string.Format("{0:000000}", a); , '); }