文章目录

  • Instruments 的介绍
  • Instrument 能为我们提供什么?
  • 常用工具:
  • Leaks工具的使用
    • 为什么要使用Leaks工具?
    • 使用步骤
      • 检测是否有泄漏
      • 定位修改
    • Leaks界面分析
    • Call Tree的四个选项:
    • 开启ARC后,内存泄漏的原因
  • Time Profiler 工具的使用
    • 为什么要使用Time Profiler 工具?
      • 使用步骤
      • Call Tree Constraints
  • 总结

Instruments 的介绍

Instruments 是一个很灵活的、强大的工具;是性能分析、动态跟踪 和分析 OS X 以及 iOS 代码的测试工具;用它可以极为方便收集关于一个或多个系统进程的性能和行为的数据,并能及时随着时间跟踪而产生的数据,并检查所收集的数据,还可以广泛收集不同类型的数据;也可以追踪程序运行的过程,这样 instrument 就可以帮助我们了解用户的应用程序和操作系统的行为。

Instrument 能为我们提供什么?

  • 追踪代码中的(甚至是那些难以复制的)问题;
  • 分析程序的性能;
  • 实现程序的自动化测试;
  • 部分实现程序的压力测试;
  • 执行系统级别的通用问题追踪调试;
  • 使你对程序的内部运行过程更加了解。

常用工具:

里面提供了19种检测工具

我们常用的有4种
分别为:

  • Leaks:找到引发内存泄漏的起点
  • Time Profiler:分析代码的执行时间,找出导致程序变慢的原因
  • Allocations:监测内存使用/分配情况

Leaks工具的使用

为什么要使用Leaks工具?

迅速膨胀的内存可以很快让程序毙命,所以要多加防范。即使有 ARC(自动引用计数)内存管理机制,但在现实中对象之间引用复杂,循环引用导致的内存泄漏仍然难以避免,所以关键时刻还要自力更生。分析内存泄露不能把所有的内存泄露查出来,有的内存泄露是在运行时,用户操作时才产生的。那就需要用到 Instruments 的leaks 了。

使用步骤

检测是否有泄漏

点击Product中的Profile

选择Leaks

或者 直接在自己的项目中运行程序
选中Memory点击右上角的Profile in instruments

两个方法一样

都可以进入下面的页面:


由于 Leaks 是动态监测,所以我们需要手动操作 APP,进行测试,一边操作 APP,一边观察 Leaks 的变化,在 暂停按钮 的右边 我们可以选择正在 运行的程序 & 选择设备 & App, 之后点击 红点 Record(红色圆圈按钮)运行。

观察,如果发现在 Leaks 里面有一个 红色X,这说明了我们的 APP 存在内存泄露。

就像这样

点击暂停,点击其中一个,然后我们开始分析。

定位修改

此时选中有红色叉的 Leaks,下面有个Leaks 字方格,点开,选中 Call Tree。

接着就是最关键的一步,在这个界面的右下角有若干选框,选中Invert Call Tree(从上到下跟踪堆栈信息) 和 Hide System Libraries(表示隐藏系统的函数)


在详情面板选中显示的若干条中的一条,双击,会自动跳到内存泄露代码处,然后点击右上角 Xcode 图标进行修改。

Leaks界面分析

  • Leaks 启动后会开始录制,随着对模拟器运行的 App 的操作,可以在 Leaks 中查看内存占用的情况。
  • Leaks顶部分为两栏:Allocations 和 Leaks,右侧的曲线代表内存分配和内存泄漏曲线。

Call Tree的四个选项:

  • Separate By Thread: 线程分离,只有这样才能在调用路径中能够清晰看到占用CPU最大的线程.每个线程应该分开考虑。只有这样你才能揪出那些大量占用CPU的"重"线程,按线程分开做分析,这样更容易揪出那些吃资源的问题线程。特别是对于主线程,它要处理和渲染所有的接口数据,一旦受到阻塞,程序必然卡顿或停止响应。
  • Invert Call Tree: 从上到下跟踪堆栈信息.这个选项可以快捷的看到方法调用路径最深方法占用CPU耗时(这意味着你看到的表中的方法,将已从第0帧开始取样,这通常你是想要的,只有这样你才能看到CPU中话费时间最深的方法),比如FuncA{FunB{FunC}},勾选后堆栈以C->B->A把调用层级最深的C显示最外面.反向输出调用树。把调用层级最深的方法显示在最上面,更容易找到最耗时的操作。
  • 表示隐藏系统的函数,调用这个就更有用了,勾选后耗时调用路径只会显示app耗时的代码,性能分析普遍我们都比较关系自己代码的耗时而不是系统的.基本是必选项.注意有些代码耗时也会纳入系统层级,可以进行勾选前后前后对执行路径进行比对会非常有用.因为通常你只关心cpu花在自己代码上的时间不是系统上的,隐藏系统库文件。过滤掉各种系统调用,只显示自己的代码调用。隐藏缺失符号。如果 dSYM 文件或其他系统架构缺失,列表中会出现很多奇怪的十六进制的数值,用此选项把这些干扰元素屏蔽掉,让列表回归清爽。
  • 递归函数, 每个堆栈跟踪一个条目,拼合递归。将同一递归函数产生的多条堆栈(因为递归函数会调用自己)合并为一条。

开启ARC后,内存泄漏的原因

开启了ARC并不是就不会存在内存问题,苹果有句名言:ARC is only for NSObject。

使用ARC的项目,一般内存泄漏都是 malloc、自定义结构、资源引起的,多注意这些地方进行分析。
注:如果你的项目使用了ARC,随着你的操作,不断开启或关闭视图,内存可能持续上升,但这不一定表示存在内存泄漏,ARC释放的时机是不固定的。

Time Profiler 工具的使用

为什么要使用Time Profiler 工具?

帮助我们分析代码的执行时间,找出导致程序变慢的原因

使用步骤

和前面的使用步骤一样 当点击应用程序开始运行后,就能获取到整个应用程序运行、消耗时间分布和百分比。

正上方显示运行的时间

运行轨道为下面的

扩展面板,在时间探查仪器的情况下,它是用来跟踪显示堆栈

详细地面板。它显示了你正在使用的仪器的主要信息,这是使用频率最高的部门,可以从它这里看到cpu运行的时间.这里是详情面板,展示的是你正在使用的工具的主要信息。就现在而言,这里展示的是最"笨重(hottest)"的方法–换句话说,占用CPU时间最长的方法。点击上方的bar会看到Call Tree(左手边的那个)并选中Sample List,然后你会看到数据的不同视图,视图展示了每一个示例。点击其中几个,你会在Extended Detail inspector中看到被捕获的堆栈跟踪。

与之前的操作一样

最终显示的内容也可以双击打开 并且

Call Tree Constraints

Count:设置调用的次数(调用2次以上的方法)
Time (ms):设置耗时范围(耗时20毫秒以上的方法)

command + f也可以搜索自己想要查看的函数名或类名

总结

这两个基本操作就这些,挺有意思的一个编译器辅助工具 可能写的不全面 后面如果再次使用到了会补上

[iOS开发]Instruments工具的学习相关推荐

  1. iOS开发mac工具

    前言   iOS工程师一直都是那么的高逼格,用的是Mac电脑,耍的是iPhone手机,哇咔咔~~   但是,作为一名iOS开发工程师,我们除了高逼格外,还必须是全能的.你不会点UI设计.不会点后台语言 ...

  2. iOS开发60分钟入门学习精华

    有过脚本开发经验的人(如Javascript,PHP,Shell)在刚开始学习iOS开发的时候,会觉得iOS开发的学习曲线比脚本语言要高,是的,这种感觉是对的.因为学iOS开发,不仅是学习一门新语言, ...

  3. 强大的iOS开发必备工具

    做iOS应用开发的,没有这些工具怎么行,强大的iOS开发必备工具!需要的速来拿! 1.ShareSDK 下载链接:http://sharesdk.cn/Download 软件首页:http://sha ...

  4. IOS开发常用工具网站地址

    IOS工具网站 http://www.scoop.it/t/ios-dev   ios 工具推荐网站 http://blog.devtang.com/blog/2012/12/02/use-cocoa ...

  5. iOS资源帖-优秀博客、iOS开发技术文、学习网站

    原链接:https://www.jianshu.com/p/619c61d9c8fb 一些博客 王巍 Objc中国发起人.Line工程师 ibireme YYKit作者 bang JSPatch作者 ...

  6. ios开发工具_7个基本的ios开发人员工具

    ios开发工具 Whether you are an experienced iOS developer looking, or just getting started, it's essentia ...

  7. iOS开发笔记 - 工具篇

    工欲善其事,必先利其器.作为一个合格的iOS开发者,熟练的使用各种开发或辅助开发的工具也算是一项必备技能吧,下面是我整理的一些工具及其应用场景和使用方法. 文档浏览工具 Dash 网络抓包工具 Cha ...

  8. iOS开发--一些开源的学习资源

    vim插件: https://github.com/Valloric/YouCompleteMe vim插件配置: https://github.com/spf13/spf13-vim ------- ...

  9. iOS之一个iOS开发人员完整的学习路线

    iOS开发能力 掌握(最好是精通)OC语言和runtime各种细节(读过相关的clang源码和runtime源码为佳).精通基本的framework(Foundation,UIKit等,平时干活用得最 ...

  10. iOS 开发实用工具

    引言: 工欲善其事,必先利其器!好的辅助工具可以让我们的开发旅途事半功倍.接下来介绍几款博主目前正在使用的开发辅助工具. Tips: 好的工具大部分都是收费的,当然咯,你想不花钱就用起来,也不是不可以 ...

最新文章

  1. 三个基于.net的浏览器内核使用的比较
  2. Learn Blockchains by Building One
  3. OpenGL GLSL Shader Subroutines函数的实例
  4. akb48_AKB48偶像毕业后都去做什么了?日本前成员亲述转型艰辛
  5. 深度学习之 BP 算法
  6. 开启人才进阶之旅,鲲鹏开发者技术沙龙点燃计算行业激情
  7. SSM项目连接远程Linux服务器的mysql 启动tomcat卡在了 Initializing Spring root WebApplicationContext...
  8. Java文件File类型转BASE64
  9. lwj_C#_homework get set 属性
  10. 高端驱动和低端驱动--ir2110
  11. 前端可视化大屏适配方案
  12. Java jks转换pem,PEM证书转JKS
  13. 数字逻辑——时序逻辑电路
  14. HTML5+CSS3小实例:不偷看密码的超萌猫头鹰登录界面
  15. PD的CDM模型中的三种实体关系
  16. 来吧,一文彻底搞懂Java中最特殊的存在——null
  17. 基于nginx-http-flv-module提供摄像头hls flv回放流服务
  18. 小鸡手柄和劲玩X3蓝牙手柄对比
  19. 04_NetBean安裝
  20. 2014山东省第五届ACM省赛

热门文章

  1. SpringBoot配置SSL证书
  2. 方图来袭,且看483万亿美元的场外衍生品市场如何风云变幻
  3. java讲师助理面试题_面试Java开发师常问到的5个问题(附答案)
  4. /NOENTRY在VS里面的设置位置
  5. MT管理系去弹窗【失败】
  6. 基于vue transform: translateY 上下滑动实现
  7. Pandas:用Python做日报(重构)
  8. 桌面计算机未响应,电脑软件总是未响应 电脑应用程序经常无响应,
  9. 容器如何访问外部世界?- 每天5分钟玩转 Docker 容器技术(36)
  10. 完美解决failed to open stream: HTTP request failed!(file_get_contents引起的)