一、Instrument说明
Instrument是一款苹果自带的测试工具,用于相关的性能分析和动态跟踪,其中有内存性能测试,图形性能测试、内存性能测试等,可以快速边便捷的去跟踪测试自己的app。
下面是打开方式: 或者通过Xcode工具栏中的Product→Profile调出画面,或者快捷键command+i。
1. 功能介绍
- 检查一个或多个app或进程的行为
- 检查特定于设备的功能,例如蓝牙
- 支持在模拟器或物理设备上进行执行分析,建议真机测试更准确
- 可追溯代码中的问题
- 可以对应用程序的性能进行分析
- 可以查找内容问题,例如内容泄漏,僵尸对象等
- 分析应用,寻找可以优化应用程序的方法
- 另外测试配置可以另存模版
2.常用模版介绍
- Leaks(泄漏):一般的查看内存使用情况,检查泄漏的内存,并提供了所有活动的分配和泄漏模块的类对象分配统计信息以及内存地址历史记录;
- Time Profiler(时间探查):执行对系统的 CPU上运行的进程低负载时间为基础采样。
- Allocations(内存分配):跟踪过程的匿名虚拟内存和堆的对象提供类名和可选保留/释放历史;
- Activity Monitor(活动监视器):显示器处理的 CPU、内存和网络使用情况统计;
- Blank(空模板):创建一个空的模板,可以从 Library 库中添加其他模板;
- Core Data:监测读取、缓存未命中、保存等操作,能直观显示是否保存次数远超实际需要。
- Network:跟踪 TCP/IP 和 UDP/IP 连接。
- Engergy Log: 应用的电量消耗情况
3.界面说明
-
1、控制记录过程,点击红色的"记录"按钮可以停止或开始当前正在分析的app(在记录和停止按钮之间切换),暂停键,暂停当前正在运行的app。
-
2、被称作路径(track),如你选择的Time Profiler工具而言,因为只有一个工具,所以这里只有一条路径。
-
3、详情面板,展示你正在使用的工具的主要信息。
-
4、执行计时器(run timer),计时器记录着正在分析的app执行了多长时间、执行了多少次。如果你使用记录控制按钮来停止你的app,然后重启,这将创建一个新的运行记录,同时会显示"Run 2 of 2"。
-
5、详情面板对应的详情。
二、Instrument 使用
1. 模版的创建、保存和打开
a. 模版的创建
打开instrument工具选择设备以及设备的上应用(1处),然后选择模版,点击choose即可(command+i打开时设备和应用已经有Xcode选定不可更改)。
b. 模版的保存
点击save即可,然后你会在目录中发现一个.trace结尾的文件。
c、模版打开
对于已经保存的trace文件,你可以使用instrument打开。
2. 模版的使用
1.Time Profiler
耗时分析工具,用来检测cpu性能、各个方法的执行耗时
步骤:1.模版中选择Time Profiler,然后选择设备和应用
2.单击工具栏中的“录制”按钮()(或按Command-R)开始录制
3.完成后,单击“停止”按钮(),或再次按Command-R
4.勾选下方的Call Tree中"Separate by Thread"、"Invert Call Tree"和 "Hide System Libraries"选项后,可以看到对应的代码执行耗时
5.分析收集到的数据
可以看出来主线程耗时最多,点击可以查看具体的方法的耗时
点击小箭头可以跳到只有该方法的耗时统计,点击右侧heavlest stack trace列表可以跳到对应的源码位置
右侧点击可以看到调用的地方,右方显示了调用的地方的详情
此外可以在instrument的preferences中设置cpus的选项,可设置处于活动状态的核心的数量以及是否允许内核使用多个活动执行单元。
2.Counters - 模拟器不可用
性能监视器计数器(PMC)是用于测量处理器中发生的事件的硬件寄存器,Counters工具记录来自用户管理的PM事件的信息, 它可以记录单个进程或系统上运行的所有进程的信息。
步骤:1.模版中选择Counters,然后选择设备和应用
2.选择' File > Recording Options'打开对话框
3.在对话框里添加要跟踪的内容
4.单击工具栏中的“录制”按钮()(或按Command-R)开始录制
5.完成后,单击“停止”按钮(),或再次按Command-R
6.分析数据
另外需要注意可以跟踪的PMC的事件的数量取决于硬件。
3.Allocations
Allocations使用_Allocations_ 和 _VM Tracker_来测量应用程序中的常规和虚拟内存的使用情况,其中在_Allocations_中可跟踪已分配但不再需要的被废弃的内存。
步骤:1.模版中选择Allocations,然后选择设备和应用
2.单击工具栏中的“录制”按钮()(或按Command-R)开始录制
3.完成后,单击“停止”按钮(),或再次按Command-R
4.分析数据
一些说明:
Persistent
:该对象存在于内存中的个数.
Transient
:存在过已经被回收的对象的个数.
Persistent
: Byte:该类对象在内存中占得总内存.
Growth
:增加的内存.
你可以找到你需要跟踪追溯的对象,例如我这里UITabBarItem,点击右边小侧头,具体查看
一共有多少个该类型的对象,并且可以查看该对象的事件(maclloc、retain等)
4.Leaks
用于检测内容泄漏。 步骤:
1.模版中选择Leaks,然后选择设备和应用
2.单击工具栏中的“录制”按钮()(或按Command-R)开始录制
3.完成后,单击“停止”按钮(),或再次按Command-R
4.分析数据
1处可选择视图选项,选择call,底部选择Call Tree中 Separate by Thread和 Hide System Libraries两个选项,方便查看代码所在位置
2处红色的叉叉为内存泄漏,点击可以查看内存泄漏的数量
3处是选中的执行过程树
双击选项可以来到泄漏的源码位置,以及显示泄漏的内存大小
5.Zombies
Zombies用户寻找僵尸对象。
步骤:1.模版中选择Zmobies,然后选择设备和应用.
2.单击工具栏中的“录制”按钮()(或按Command-R)开始录制.
3.完成后,单击“停止”按钮(),或再次按Command-R.
4.分析数据.
如果是僵尸对象导致的,instruments的右上角会弹出提示框。
提示框上提示 RechargeViewController有一个僵尸对象,点击最后的箭头即可显示详情。
然后直接滑到详情列表的最后一行,查看僵尸对象。
三、总结
Instrument的测试功能还有很多,上述都说到一部分,作为Xcode工具的一部分,它的功能也很是强大,由于没有接触的很多,所以介绍的使用很简单,后续有机会会深入了解,可能有些说的不对,请大家点出哈。