首页 关于 微信公众号
欢迎关注我的微信公众号

使用 Instruments 做 iOS 程序性能调试

Instruments 简介

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

可以看到 Instruments 功能很多,这里先介绍一下我们在开发中常用到的几种:CPU 性能测试、图形性能测试、内存性能测试。

虽然 Instruments 是 Xcode 的一个工具集,但是它是以一个独立的 App 的形式存在的,你可以在 Xcode -> Open Developer Tool -> Instruments 中打开它。

CPU 性能

要看程序执行时间性能,主要有下面几步:

1、先在 Xcode 中对当前的项目做 Profile (Command-I):

image

这时就会打开 Profiling Template 选项对话框:

image

2、选择 Time Profiler 这个模板,并点击 Choose 按钮。

image

3、进入 Instruments 后,选择正确的设备和应用程序:

image

4、点击红色按钮运行后,就能得到 CPU 性能的结果了:

image

我们还能在时间轴面板里面去选择一段时间来查看该时间段里更为细节的 CPU 性能:

image

同时在中间的导航条以及右下角的控制面板中,我们还可以通过不同的选项来选择数据展示的形式和维度。

image

image

从这个结果中,我们可以看到不同的线程以及方法调用占用的时间,从而可以评估出 CPU 性能的瓶颈和优化方向。

5、除此之外,我们还能在 Instruments 选择使用 CountersActivity MonitorSystem Trace 等 Profiling Template 对程序做 CPU 性能考量。

6、需要注意的是,有时候如果你使用 Instruments 查看调用堆栈时可能看到的都是地址而不是函数名,这样就不太好定位问题了。这时候你可以把相关项目的 Build Settings - Debug Information Format 的 Debug 和 Release 都设置为 DWARF with dSYM File,这样就能将对应的堆栈信息符号化显示了。

图形性能

关于图形性能方面,我们平时最关注的应该就是「帧率」这个概念了。在 Instruments 中,我们可以使用 Core Animation + Time Profiler 来评估图形性能。使用步骤如下:

1、同「CPU 占用性能测试」一样,先在 Xcode 中对当前的项目执行 Profile (Command-I),并在打开的对话框中选择 Core Animaiton 这个模板:

image

2、进入 Instruments 后,选择正确的设备和应用程序。

3、点击红色按钮运行应用程序,随着我们操作 App 界面,就可以看到帧率的变化和数据了:

image

在滑动屏幕时,帧率越高表示性能越好,帧率过低则意味着屏幕可能会出现卡顿。

4、在右下角面板的 Display Settings 区域,我们可以看到多个 Debug Options:

我们可以使用这些选项,来监测更加具体的图形性能。

5、我们还可以选择使用 OpenGL ES AnalysisGPU Driver 等模板来监测图形相关性能。

内存性能

Instruments 可以帮我们了解到应用程序使用内存的几个方面:

这里我们介绍下查找内存泄露的过程:

1、同「CPU 占用性能测试」一样,先在 Xcode 中对当前的项目执行 Profile (Command-I),并在打开的对话框中选择 Leaks 这个模板:

image

2、进入 Instruments 后,选择正确的设备和应用程序。

3、点击红色按钮运行应用程序,我们可以看到如下界面:

image

4、在 Display Settings 中勾选 Invert Call TreeHide System Libraries 或其他选项可以过滤显示的数据。

image

5、在导航栏的筛选框中,我们可以输入关键字来筛选数据。

image

6、在实际使用中,我们进入一个页面后再退出,发现相关的内存分配没有清空,这时候就发生内存泄露了。我们查看更细节的调用信息,追踪到可能造成内存泄露的代码位置:

image

7、我们还可以使用 Activity MonitorAllocationsZombies 等模板来针对性地做内存监测。

参考

Blog

Opinion

Project