Instrument调试

INSTRUMENTS调试工具的使用(四)

2017-06-22  本文已影响207人  刀客传奇

版本记录

版本号 时间
V1.0 2017.06.22

前言

我们在做app的时候,不是做完功能就结束了,很多时候是需要进行检查和优化的,而xcode自带了一个很好的检查工具,可以检测内存泄漏。还可以查看哪一个方法比较耗时。还可以检测离屏渲染等等,随后的几篇我们就说一下这个工具的使用。感兴趣的可以看这几篇。
1.INSTRUMENTS调试工具的使用(一)
2.INSTRUMENTS调试工具的使用(二)
3.INSTRUMENTS调试工具的使用(三)
这一篇就先说一下查看数据的工具以及内存分配

八、查看数据工具

前面我们已经说过,每个跟踪文档都包含了以下接口元素:

这里的每个控件显示的都是你跟踪文档里面相同的数据。它们只是以不同的方式 显示而已,关于每个数据点从高级的预览到详细的信息等。这样可以让你以不同的方 式来查看你的数据。你可以通过查看高级的数据来分析变化趋势,然后查看详细的数 据来确定在你的代码中将要发生的事情和制定关于如何解决潜在问题的思路。

1. 跟踪面板

跟踪面板是跟踪文档窗口里面最突出的部分。跟踪面板紧接于 instruments 面板 的右边。该面板为每个 instrument 工具 供了收集数据的一个高级图形视图。你可以使用该面板来核查你从每个 instrument 工具收集到的数据,并可以选择你想进一 步研究的区域。

跟踪面板中的自然图形可以让你更容易的发现你程序的趋势和潜在的问题。比 如,图形中一个内存使用的尖峰信息意味着在该地方你的程序分配的内存比平时更 多。该尖峰信息可能是正常的,也可能是意味你的代码比你预计在此地方创建了更多 的对象或内存缓冲区。一个 instrument 工具(例如 Spin Monitor instrument)也 同样可以指出你程序反应迟钝的地方。如果 Spin Monitor 的图形相对是空白的,你 就知道你的程序是正常响应,但如果该图形不空白,那么你可能需要核查为什么会出 现这样的情况。

2. 详细面板

  详细面板一般在界面的下边,通过它可以很好的跟踪数据。可以通过下面方式打开详细面板。

打开详细面板 详细面板展示

当详细信息很多的时候,我们还可以搜索关键词来找到想要的信息,如下图所示。

详细信息搜索

3. 扩展详细面板

  对于部分 instruments 工具,扩展详细面板显示了当前在详细面板里面所选择的 项目的额外信息。你可以执行以下任一操作来打开和关闭扩展详细面板。

菜单栏打开 快捷键展开扩展面板

九、使用Allocations Instrument工具分析数据

  Allocations instrument 工具是一个跟踪所有由应用程序分配的内存的工具。所以你可以使用那些信息来识别在你应用程序里面的内存分配模式,并识别你的应用程序内存效率低下的地方。

  因为它跟踪整个应用程序生命周期的内存分配,你必须从 Instruments 应用里面 加载你的程序以便 Allocations instrument 工具可以收集它所需要的数据。在加载 的时候,Allocations instrument 使用系统中已有的挂钩(hooks)来记录与你应用程 序中分配和释放事件相关的信息,无论这些事件起源于系统标准分配入口还是你自己 自定义的分配库。随着数据流的到来,instrument 更新并实时的向你显示内存是如 何被分配的。

  Allocations instrument 可以工作在使用标准分配函数(如 malloc,calloc 或 free)的应用程序,而且也也可以工作在使用垃圾回收(garbage collected)的应用 程序上面。后一种情况,收集器依然调用 free 来释放 GC-aware(GC 感知)内存。 Allocations instrument 同样可以在构建在分配内存之上的例程里面工作,包括 Core Foundation 和 Cocoa 的内存分配例程。

分析对象分配的数据

  Allocation instrument 工具的目的是为你显示你的应用程序如何使用内存。内存是系统重要的资源,你应该明智的使用它。每个内存分配都包含了直接成本和潜在 的长期成本。直接成本就是它分配内存所消耗的时间,包括创建新的虚拟内存页面和 把它们映射到物理内存上面。它也有可能包括把陈旧的内存页面写入硬盘。而从长远 来看,保持块状的物理内存可能触发系统额外的页面,这和其他页面操作一样可能对 系统性能损耗很大。和所有工具一样,Allocation 工具开始的地方也是跟踪面板。默认配置下,跟踪 面板图形化你当前应用程序使用内存数量的净额。使用 instrument 的检查器,你可 以修改视图让它显示分配的密度,即内存分配发生的地方,或你也可以让它显示堆栈的深度。分配密度图可以让你查看在你程序里面内存分配发生的频率。分配密度的尖峰意味着潜在的瓶颈,而你可以通过预先分配块或减少对其他块的依赖来减缓该情况。

跟踪引用数的事件

  当你把 Allocations instrument 添加到你的文档里面的时候,它的初始化配置是只记录内存的分配和释放的事件。默认情况下,它不会记录引用数的事件,比如 CFRetain 和 CFRelease 的调用。原因是记录引用数的事件会给从进程里面收集数据 增加了额外的开销,而且在大部情况是不需要的。然而如果你的代码发生内存泄露, 你可能想要配置 Allocations instrument 来记录这些事件作为你努力追查泄露的一 部分。特别是,你可以查看任何不匹配的 retain 和 release 的事件来查看一个对象 是否最后引用被删除了而它仍然保留着。

下面就是我的一个工程的内存分配。

内存分配

后记

未完,待续~~~

我的家
上一篇下一篇

猜你喜欢

热点阅读