使用 Instruments User Interface 工具,你可以在 收集数据的过程中记录用户事件。你可以使用这些数据来可靠的重复重现这一系列
使用 Instruments User Interface 工具,你可以在 收集数据的过程中记录用户事件。你可以使用这些数据来可靠的重复重现这一系列
使用 Instruments User Interface 工具,你可以在 收集数据的过程中记录用户事件。你可以使用这些数据来可靠的重复重现这一系列有 序的事件
correlate
Instruments 会把 Activity Monitor instruments 工具添加到跟踪文档里面
记住程序分析是一门艺术也是门科学。在科学方面,也有一些可以遵循的指南来 发现问题。比如,如果你的应用程序占用内存过大,那么有可能是应用程序在某些地 方分页,导致性能表现不佳。艺术方面,因为每个应用程序如何减少内存占用的方案 四不同的。是否应用程序收集的数据过多?是否它加载太多而又没有使用的的库?是 否内存泄露?这些都是你需要问你自己的问题
单击你的跟踪文档里面的 Pause 按钮。Instruments 应用暂时停止收集数据, 但是并没有停止当前正在执行的记录
两个不同的记录模式之一来收集数据
快速启动键是全局组合键,它可以让你启动 Instruments 应用程序并使用指定的 文档模板立即开始收集跟踪数据
为了使用快速启动键来给应用程序收集数据,你要做以下步骤:
1. 把光标放在属于你要跟踪的应用程序的窗口上面。
2. 按下合适的组合键来开始跟踪。
3. 运行应用程序。
4. 当你想停止跟踪的时候,你有两种选择:
z 把光标放在其中之一的应用程序窗口上面,再次按下组合键。
z 找到已经打开的跟踪文档并按下 Stop 按钮。
因为快速启动键要求你把光标移动到其中一个应用程序窗口之上,你可以使用同 一个快速启动键来给不同的应用程序初始化多个跟踪对话而无需停止任何之前的跟 踪。你也可以使用不同的组合键来给同一个应用程序开始不同类型的跟踪,并让它们 在同一个时间收集所有的数据。
3.4 以最小模式运行 最小模式(Mini mode)为你提供了一种在收集数据的时候尽量减少 Instruments 应用程序可视化尺寸的方法。当你从特定类型的应用程序收集数据的时候,尤其是面 向图形的应用程序,在你集中于你应用程序的时候,很多时候你需要收集你的数据。
最小模式隐藏很多打开的跟踪文档,在它们的地方显示很多浮动的窗口,你可以使用 它们来开始和停止跟踪。最小模式的一个优点是 Instruments 应用程序本身需要很少 的绘画,所以对系统性能影响很少。
图 3-4 显示了打开几个跟踪文档的最小化 Instruments 应用窗口。Instruments 应用在最小模式的时候同一时间只显示三个跟踪文档,但是你可以使用向上和向下箭 头来找你想要的跟踪文档。
2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [28]
为了使用快速启动键来给应用程序收集数据,你要做以下步骤:
1. 把光标放在属于你要跟踪的应用程序的窗口上面。
2. 按下合适的组合键来开始跟踪
当你想停止跟踪的时候,你有两种选择:
z 把光标放在其中之一的应用程序窗口上面,再次按下组合键。
z 找到已经打开的跟踪文档并按下 Stop 按钮
最小模式(Mini mode)为你提供了一种在收集数据的时候尽量减少 Instruments 应用程序可视化尺寸的方法
为了启用最小模式,选择 View > Mini Instruments。为了禁用最小模式,单击 最小模式的 Instruments 窗口的关闭框。你也可以在标准和最小模式之间切换,通过 选择 View > Mini Instruments。
3.5 从Xcode运行Instruments应用 在开发期间,你可以从 Xcode 3 的用户界面直接加载你的应用程序到 Instruments 应用里面。这个整合功能可以让你同时快速的加载 Instruments 应用和收集跟踪数 据,那会启动你的程序并使用 GDB 调试它。
Xcode 3 里面的 Run > Run with Performance Tool 子菜单提供了几种使用可用 性 能 工 具 来 加 载 你 程 序 的 方 法 , 包 括 Instruments 。
当 加 载 你 的 应 用 程 序 到 Instruments 应用的时候,你可以通过选择合适的菜单项目告诉 Xcode 你想要使用的 Instruments 模板。Xcode 加载 Instruments,使用特定的模板新建跟踪文档,为你的 程序设置目标,并告诉 Instruments 来加载你的程序和开始记录数据。
除了在 Run with Performance Tool 子菜单已有的模板,Xcode 同样允许你添加 自定义的跟踪模板到菜单栏。关于更多如何保存一个跟踪模板并把它添加到菜单的信 息,参阅“保存 Instruments 跟踪模板”部分。
3.6 无线连接iOS设备 为了使用扩展访问给 iOS 应用程序收集数据,你可以在 Instruments 应用和你的 设备之间建立一个无线连接。当一个无线设备不切实际或不方便的时候你也可以使无 2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [29]
无线连接iOS设备
在事件被记录之后,你可以多 次回放跟踪来反复生成相同的一系列事件
使用 User Interface 的 instrument 工具来记录用户界面轨迹
使用 UI Recorder 模板来新建一个新的跟踪文档,Instruments 应用会自动为你添 加 User Interface 的 instrument 工具到文档里面。
Action 设置会被找到设置为 Drive。为了重新捕获,你必须修改设置为 Capture。完成这些之后,你可以开始记录新的事件序列了
当收集跟踪数据时,你可以点击文档工具栏的 Loop 按钮来让 Instruments 应用 多次重复用户界面轨迹的事件。该按钮是黏性的,所以单击它启动循环而再次单击则 禁用循环
你也可以使用循环来让你的应用程序持续工作来对 它进行压力测试
这里的每个控件显示的都是你跟踪文档里面相同的数据。它们只是以不同的方式 显示而已,关于每个数据点从高级的预览到详细的信息等。这样可以让你以不同的方 式来查看你的数据。你可以通过查看高级的数据来分析变化趋势,然后查看详细的数 据来确定在你的代码中将要发生的事情和制定关于如何解决潜在问题的思路
一个 instrument 工具(例如 Spin Monitor instrument)也 同样可以指出你程序反应迟钝的地方。如果 Spin Monitor 的图形相对是空白的,你 就知道你的程序是正常响应,但如果该图形不空白,那么你可能需要核查为什么会出 现这样的情况。
点击时间线并移动播放头来定位和 显示检查器的旗帜(inspection flags),该旗帜总结了 Instrument 中该定位地方的 信息
一个跟踪运行(trace run)构成由你点击了 Record 按钮来开 始收集到点击 Stop 按钮来停止收集之间的数据
当你正在尝试重 现一个并不是每次运行都可以出现的问题时,你可以收集多个跟踪运行的数据,创建 新的跟踪运行直到问题出现
然而如果你想要使用相同的事件集来比较多个跟踪运 行,你需要创建新的用户界面轨迹和一个想要的进程,该进程在“使用用户界面轨 迹”部分介绍
当你保存一个跟踪文档,Instruments 应用通常会摒弃所有跟踪运行的数据,除 了你当前选择的那个。
如果你想要保存你 跟踪文档里面所有跟踪运行的数据,进入 Instruments 应用的偏好设置的 General, 并取消勾选 Save Current Run Only 选项
Statistics to Graph 列 出了所有由 instrument 工具收集的整型的数据
为 了 编 辑 Statistics to Graph 里面 统 计 的 列 表 , 选 择 Configure 按钮。
修改跟踪显示的样式 Instruments 应 用 提 供 了 几 种 在 跟 踪 面 板 显 示 收 集 的 数 据 的 样 式
如 5-5 显示了和 File Activity instrument 相关的详细面板,它记录了和指定文件系统例程相关的 信息。这里面的详细面板显示了文件系统例程调用的方法和函数,使用的文件的描述, 和访问的文件的路径
修改详细面板的显示样式 对于部分 instruments 工具,你可以在详细面板里面使用多于一个格式显示数据
使 用 Inspection Range 控件(如图 5-7 所示)来聚焦在某个特定的时间范围收集的数据
你也可以在跟踪面板里面预设的 insturment 工具上通过按住 Option 键并单击和 拖动核查范围来设置它的区域。单击并拖动鼠标活跃的 instrument 工具(如果它尚 未活跃),并根据 instrument 工具来使用鼠标按下和鼠标放开来设置范围
清空核查范围,单击 Inspection Range 控件里面中间的按钮。
如你有一个 Xcode 项目,它的源码字符被列举在堆栈跟踪上面,你可以单击一个 字符的名称来在扩展详细面板里面显示相关的源码。该源码被标注为和性能有关
运行浏览器是一个快速查看和管理之前运行的方法。如果你的跟踪文档包含数个 运行,你可以使用该模式在列表的顶部扫描你想要并促进它的运行。你也可以删除这 些运行,并给当前视图的运行添加注释
收集和查看跟踪数据很简单。但是分析数据并定位潜在的问题就比较困难。后者 的任务把性能调优和调试的艺术变为现实
Sampler instrument 工具是一个在运行的程序上面执行统计分析的工具。执行样 本统计包括在定期停止应用程序并记录在那个一刻执行的信息
样本统计的优点是它是一个轻量级的并很方便的方式来发现你应用程序在一个 周期里面所做的工作
该技术可以在任何没有安装特别的插件代码的应用程序里面使 用,而且它通常提供了一个合理准确了解你应用程序的运行行为的图片
Sampler instrument 工具的主要目的是显示程序在该地方的地消耗的时间。它通 过给你显示什么函数被调用并且被调用的次数来达到该目的
可以查看每个线程的执行分支确认那个比其他拥有更多数 量的样本。扩展每个线程可以让你看到的独立的方法和函数,以及它们收集的样本数 据。为了一次性扩展整个层级结构,按下 Option 键并同时点击扩展三角形
Call Tree 的配置选项提供了几个方法来在不删除任何样本数据的前提下删减调 用树。当你
另外,Call Tree Constraints 实际上从视图里面移除了一组样本来让你集中于 你的满足特定条件的代码路径
Allocations instrument 工具是一个跟踪所有由应用程序分配的内存的工具。所 以你可以使用那些信息来识别在你应用程序里面的内存分配模式
因为它跟踪整个应用程序生命周期的内存分配,你必须从 Instruments 应用里面 加载你的程序以便 Allocations instrument 工具可以收集它所需要的数据
Allocation instrument 工具的目的是为你显示你的应用程序如何使用内存。内 存是系统重要的资源,你应该明智的使用它。每个内存分配都包含了直接成本和潜在 的长期成本。
使用 instrument 的检查器,你可 以修改视图让它显示分配的密度,即内存分配发生的地方,或你也可以让它显示堆栈 的深度。分配密度图可以让你查看在你程序里面内存分配发生的频率
随着“Record referenc counts”选项被设置,Allocations instrument 在模板文档里面 查找内存泄露地方,这会帮助你追踪到内存的泄露。
过滤详细面板的内容 表 5-4 列出了高级的配置选项,你可以应用它们到 Allocations instrument 记 录的事件上面。你使用这些选项来集中于分析特定时间发生的事件,或涉及你代码的 特定部分。所有的这些选项仅当使用大纲或图形模式查看数据的时候才可用。在列表 模式下,Allocations instrument 显示所有分配的历史记录。
Table 5-4 Configuration options for the Allocations instrument Description Configuration section Allocation Lifespan Choose between displaying all allocation events and those associated with objects that still exist. Call Tree Choose these options to flatten or hide uninteresting parts of the call tree. You can separate out memory blocks based on which thread allocated them, hide allocations made by system libraries, show allocations made from Objective-C calls only , and more. These options help you trim irrelevant portions of the call tree and organize the remaining data in ways that make it easier to spot trends. Call Tree Constraints Choose the constraints for the data you want to view. You can use these configuration fields to prune the current data set. The Allocations instrument supports constraining data based on the number of allocations made for a given type or the size (in bytes) of the allocations.当你应用一个 instrument 的配置选项的时候,不要忘记你也可以限制样本数据 基于这些样本何时被收集。每个跟踪文档里面的 Inspection Range 控件可以让你查 看特定样本点的数据。该特性和其他 instrument 的配置选项组合使用。关于更多如 何使用 Inspection Range 控件的信息,参阅“查看一个时间范围的数据”部分。
2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [52]
随着“Record referenc counts”选项被设置,Allocations instrument 在模板文档里面 查找内存泄露地方,这会帮助你追踪到内存的泄露。
Leaks instrument 提供了和使用 leaks 命令行工具一样的检测泄露的能力。这个 instrument 分析你程序代码里面不在被引用而又正在使用的内存块。不被引用的内 存块也被视为“leaks”,因为它们不能再被你的应用程序释放,而且一直占用内存 空间直到程序退出
Instruments 应用给你访问这个强大的 DTrace 工具提供了一个套简单的接口,而无 需太复杂的操作
以下部分介绍了如何创建一个自定义的 instrument 工具,和如何在 Instruments 应用和 dtrace 命令行工具里面配合使用这些 instrument 工具
自定义 instruments 工具使用 DTrace 探针(probe)。探针(probe)是一个就像 是在你的代码里面放置了一个传感器。它响应 DTrace 可以绑定的位置和事件
当函数执行或事件产生的时候,相关的探针会被触发,且 DTrace 运 行任何和探针相关的动作。大部分 DTrace 的动作只是简单的收集关于操作系统的数 据和用户程序此刻的行为。然而可以运行一个自定义脚本作为动作的一部分。脚本可 以让你使用 DTrace 的特性来微调你收集的数据
断言(predicate)是一个可以让你限制探针动作何时运行的条件状态。
比如,你可以限制一个探针到指定的进程或用户,或你可以在你 instrument 里面指 定的条件为真的时候运行动作
断言
默认情况下,探针不包含任何断言,意味着探针每次 触发的时候相关的动作将会运行。然而你可以添加任何数量的断言到探针里面,使用 AND 和 OR 操作符来连接它们构成一个复杂的决策树
组成
一个 instruments 工具由以下几部分构成: z 一个描述部分,包含了 instrument 的名称、类别和描述 z 一个或多个探针,每个包含了和它相关的动作和断言 z 一个 DATA 声明区域,你可以使用它来声明所有探针共享的全局变量 z 一个 BEGIN 脚本,它初始化任何全局变量,并执行任何 instrument 所需的启动 任务 z 一个 END 脚本,它执行任何最后清理的动作
你的探针返回给 Instruments 应用的任何数据都会被收集并显示在 instruments 工具的详细面板上面。详细面板显示所有的数据变量,无论它的类型是什么
因为 DTrace 脚本运行在内核空间,而 Instruments 应用运行在用户空间,如果 你想要返回一个自定义指针类型的脚本变量的值给 Instruments 应用,你必须创建一 个缓冲区来存储这些变量的数据
创建缓冲区最简单的方式是使用 DTrace 里面的 copyin 或 copyinstr 子程序。copyinstr 子程序需要一个 C 字符串指针的参数,并返 回一个字符串内容形式,你可以把该字符串返回给 Instruments 应用
脚本可以在内核级别直接和 DTrace 交互,提供访问关于内核和活跃进程的底层信息。大部分 instruments 工具使用脚本 来收集 DTrace 不容易提供的信息。你也可以使用脚本在数据返回给 Instruments 应 用时操纵原始数据。比如,如果你想要更容易的和 instruments 跟踪面板的其他值比 较,你可以使用脚本来格式化一个特定范围的数据值
因为传递数据回 Instruments 应用包括从内核空间 拷贝数据到 Instruments 应用的程序空间,因此你应该总是通过在“Record the following data:”部分的 instruments 配置表里面配置合适的实体来传递数据返回 给 Instruments 应用
DTrace 脚本有一个基本扁平的结构,因为缺乏流程控制语句,而且其设计为了保 证探针的执行时间最小化。然而 DTrace 脚本里面的变量,根据你的需求划分到不同 的作用域
查找脚本错误
Instruments 应用在你在你的跟踪文档里面按下 Record 按钮但跟踪又没有真正开始的时候报告你 该错误。在错误消息的气泡里面包含了一个编辑按钮。单击该按钮来打开 instrument 工具的配置表,它此刻会标识探针的一个错误