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. 删除kubernetes-dashboard

    kubectl get secret,sa,role,rolebinding,services,deployments --namespace=kube-system | grep dashboard ...

  2. 牛客竞赛(gcd,快速幂)

    一.最大公约数和最小公倍数问题 题目描述: 输入2个正整数x0,y0(2<=x0<100000,2<=y0<=1000000),求出满足下列条件的P,Q的个数. 条件:1.P, ...

  3. Want To Become A Web Design Expert? Read This Piece

    Want To Become A Web Design Expert? Read This Piece It can be very expensive to hire a web design fi ...

  4. 最新 网龙网络java校招面经 (含整理过的面试题大全)

    从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.网龙网络等10家互联网公司的校招Offer,因为某些自身原因最终选择了网龙网络公司.6.7月主要是做系统复习.项目复盘.Le ...

  5. BootStrap Table方法使用小结

    参考链接:https://www.cnblogs.com/Amaris-Lin/p/7797920.html

  6. 第34课.数组操作符的重载("[]"重载)

    1.问题:string类对象还具备c方式字符串的灵活性吗?还能直接访问单个字符吗? 答案:可以按照c字符串的方式使用string对象 string s = "a1b2c3d4e"; ...

  7. python 创建目录文件夹

    主要涉及到三个函数 1.os.path.exists(path) 判断一个目录是否存在 2.os.makedirs(path) 多层创建目录 3.os.mkdir(path) 创建目录 DEMO 直接 ...

  8. SpringBoot 使用WebSocket打造在线聊天室

    教程: https://www.jianshu.com/p/55cfc9fcb69e https://wallimn.iteye.com/blog/2425666 关于websocket基础普及见:h ...

  9. HttpServletResponse对象(转)

    Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象.request和response对象即然代表请求和响应,那我们要 ...

  10. Linux系列(15)之进程管理

    详细情况查看:https://www.cnblogs.com/dengyungao/p/8523628.html 1.查看进程 有两个命令可以查看进程,分别是ps与top(推荐使用),那他们有什么区别 ...