Instruments介绍

Instruments 是什么

Instruments 是 Xcode 的一个工具集,为我们提供了强大的程序性能分析及测试能力。使用 Instruments 你可以做下面这些事:

  1. 检查一个或多个应用或进程的行为。
  2. 检查设备相关的功能,比如:Wi-Fi、蓝牙等。
  3. 在真机或模拟器上进行性能测试。
  4. 创建自定义的 DTrace 来分析系统以及应用的各种行为。
  5. 跟踪源码中的问题。
  6. 对 App 进行性能分析。
  7. 查找 App 中的内存问题,比如:内存泄露(Leaked memory)、废弃内存(Abandoned memory)、僵尸(zombies)等。
  8. 给出程序优化的建议。
  9. 进行系统级别的问题定位。
  10. 通过脚本记录一个用户行为序列,从而可以通过运行脚本对你的 iOS 应用进行可重复多次的自动化测试。
  11. 保存测试配置模板以供复用。

我们看一下开始模板。

项目 模板详情
1.Blank创建一个空的模板,你可以自定义的添加各种工具。
2.Activity Monitor可以只用这个模板,研究系统工作负载和虚拟内存大小的关系
3.Allocations将Allocations和VM跟踪器加到跟踪文档中,使用该工具可以监视内存和对象的内存分配方式和情况。
4.CocoaLayout是一种Cocoa布局工具 ,可以应用于iOS模拟器和Cocoa桌面应用,但是不能和连接的iOS设备一起使用。观察NSLayoutConstraint对象的改变,帮助我们判断什么时间什么地点的constraint是否合理
5.Core Animation将CoreAnimation加入到跟踪文档中,可以测量ios设备上每秒的CoreAnimation帧数,这可以帮助你理解内容是如何渲染到屏幕上的,(图形性能)这个模块显示程序显卡性能以及CPU使用情况。
6.CoreData将CoreData数据提取、缓存缺失和存储加入到跟踪文档中,使用这个工具可以检测应用程序中数据的存储交互。
7.Counters收集使用时间或基于事件的抽样方法的性能监控计数器(PMC)事件。
8.Energy Log耗电量监控,将Energy Diagnostics, CPU Activity, Display Brightness, Sleep/Wake, Bluetooth, WiFi, and GPS instruments加入到跟踪文档中进行检测。
9.File Activity将File Activity, Reads/Writes, File Attributes, and Directory I/O instruments 加入到跟踪文档中,只用这个模板可以让你检查系统文件的使用情况,可以检查文件的打开、关闭、读和写操作,同时也可以检测文件系统本身的改变,包括权限和所有权发生的改变。
10.Leaks将the Allocations and Leaks instruments加入到模板中,使用这个模板可以帮助你检测内存的泄漏。
11.Metal System Trace它是是apple 2014年在ios平台上推出的高效底层的3D图形API,它通过减少驱动层的API调用CPU的消耗提高渲染效率。
12.Network用链接工具分析你的程序如何使用TCP/IP和UDP/IP链接。
13.OpenGL ES Analysis将OpenGL ES Analyzer and OpenGL ES Driver加入到模板中,这个模块测量分析OpenGL ES活动正确性检测以及表现问题,提供解决建议。
14.System Trace系统跟踪,通过显示当前被调度线程提供综合的系统表现,显示从用户到系统的转换代码通过两个系统调用或内存操作。
15.System Usage这个模板记录关于文件读写,sockets,I/O系统活动, 输入输出。
16.Time Profile执行对系统的CPU上运行的进程低负载时间为基础采样。
17. Zombies测量一般的内存使用,专注于检测过度释放的野指针对象,也提供对象分配统计,以及主动分配的内存地址历史。

下面看一下这些工具是怎么使用的。

定位内存问题

  • 内存不合理引用,检测重复操作内存是否持续增长 Allocations每次操作后,点击mark generations button,会设置一个flag,然后查看每个迭代的详细数据。
  • 内存泄漏Leaks,内存泄漏使用Leaks检测,如果对象发生内存泄漏,detail panel 中会看到对象的retain release历史记录,如果非对象发生内存泄漏,就会看到malloc和free的调用历史。
  • 野指针Zombies,Zombie问题,引用retaincount为0的对象,使用Debug模式,将环境变量NSZombieEnabled设为true。

检测I/O活动

检测iOS app如何使用TCP/IP和UDP/IP,与connections Instruments一起使用,检测app发送和接收的包数目。

图像性能检测

  • core animation graphics 用来检测帧频率
  • OpenGL activity
  • GPU Driver

CPU使用

  • Performance Monitor Counters。
  • 电量:Energry 跟踪电量、CPU、网络、显示亮度、睡眠/唤醒、蓝牙、wifi、GPS。可以全天开启Energry Diagnostics Log模式,在开发手机设备中,(重启或关机会丢失该数据),数据收集结束后,将log数据传到PC上。
  • 线程使用Multicore Trace Template,分析多核性能,线程状态、调度队列、块使用情况。Multicore Trace Template包含Thread states和dispatch Instruments。
  • Timer Profiler Trace Template检测内核使用情况。

自动化测试

UI automation Automation instrument 工具允许你让 iOS 应用的用户界面测试自动化。自动化界面测试可以让你:

  • 省去关键人员和释放其他工作资源
  • 执行更多综合测试
  • 开发可重复的回归测试
  • 减少程序错误
  • 提高开发周期,产品更新