INSTRUMENTS调试工具的使用(六)

作者: 刀客传奇 | 来源:发表于2017-06-24 00:53 被阅读264次

    版本记录

    版本号 时间
    V1.0 2017.06.23

    前言

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

    这一篇就先说一下DTrace数据使用和自定义instruments工具

    十三、使用DTrace数据

      你如果你跟踪一个包含自定义 instruments 工具的文档,你可以导出这些 instruments 工具底层的脚本,并使用 dtrace 命令行工具来运行它们。运行脚本后, 你可以重新导入结果数据进 Instruments 应用里面。

      自定义 instruments 工具使用 DTrace 来实现。DTrace 是最初由 Sun 创建和移植 到 Mac OS X v10.5 的一个动态追踪工具。由于 DTrace 深入操作系统内核,所以你可 以访问内核本身或你计算机上运行的进程的底层的操作。许多内置的 instruments 工具都是基于 DTrace 的。而且虽然 DTrace 本身就是一个非常强大和复杂的工具, Instruments 应用给你访问这个强大的 DTrace 工具 供了一个套简单的接口,而无 需太复杂的操作。

      DTrace 并没有移植到了 iOS 上面,所以不能在运行在 iOS 设备上面的应用创建自定义的 instrument 工具。


    十四、关于自定义instruments工具

      自定义 instruments 工具使用 DTrace 探针(probe)。探针(probe)是一个就像是在你的代码里面放置了一个传感器。它响应 DTrace 可以绑定的位置和事件,比如函数的主入口。当函数执行或事件产生的时候,相关的探针会被触发,且 DTrace 运 行任何和探针相关的动作。大部分 DTrace 的动作只是简单的收集关于操作系统的数据和用户程序此刻的行为。然而可以运行一个自定义脚本作为动作的一部分。脚本可 以让你使用 DTrace 的特性来微调你收集的数据。

      每次遇到探针的时候它都会触发,但是和探针相关的动作不需要在探针每次触发 的时候运行。断言(predicate)是一个可以让你限制探针动作何时运行的条件状态。

    一个 instruments 工具由以下几部分构成:

    • 一个 述部分,包含了instrument的名称、类别和述。
    • 一个或多个探针,每个包含了和它相关的动作和断言。
    • 一个DATA声明区域,你可以使用它来声明所有探针共享的全局变量。
    • 一个 BEGIN 脚本,它初始化任何全局变量,并执行任何 instrument 所需的启动任务。
    • 一个END脚本,它执行任何最后清理的动作。

      所有的 instruments 工具都应该包含起码一个探针和它相关的动作。类似的,所有的 instruments 工具都应该包含一个合适的名称和述来标识它们。


    十五、创建自定义的Instrument工具

      为了创建一个自定义的 DTrace 的 instrument 工具,选择 Instrument > Build New Instrument。

    创建需要以下几个过程:

    • 添加和删除探针
    • 指定探针的提供者
    • 给探针添加断言
    • 给探针添加动作
    • 编写自定义脚本的提示
    • 编写BEGIN和END脚本
    • 从自定义脚本里面访问内核数据
      • 因为 DTrace 脚本在系统的内核执行,它们可以访问内核的字符。如果你想要在 自定义 instruments 工具里面查看内核全局变量和数据结构,你可以在你的 DTrace 脚本里面执行这些操作。
    • 变量作用域
      • DTrace 脚本有一个基本扁平的结构,因为缺乏流程控制语句,而且其设计为了保 证探针的执行时间最小化。然而 DTrace 脚本里面的变量,根据你的需求划分到不同 的作用域。
    • 查找脚本错误
      • 如果你的自定义 instruments 工具的脚本代码包含一个错误,当你使用 DTrace 边缘该脚本的时候,Instruments 应用会在跟踪面板显示该错误的信息。Instruments 应用在你在你的跟踪文档里面按下 Record 按钮但跟踪又没有真正开始的时候报告你 该错误。在错误消息的气泡里面包含了一个编辑按钮。单击该按钮来打开 instrument 工具的配置表,它此刻会标识探针的一个错误。
    • 导出DTrace脚本
      • 尽管 Instruments 应用 供了很方便的接口来收集跟踪数据,但是很多时候直接 使用 DTrace 来收集数据会更加方便。

    十六、内置instruments工具

      Instruments 应用里面内置了许多 intruemtns 工具。每个 instrument 工具都包 含它自己的配置选项和显示信息的方式,及收集合适的数据类型。内置的 instruments 工具按照它收集的数据类型分组为少数几个类别。以下个部分更详细的 述了内置 instruments 工具。

    Core Data Instruments[Core Data相关]

    1. Core Data Saves

      Core Data Saves instrument 工具记录了 Core Data 应用中保存的操作。该 instrument 工具可以在单一进程或所有当前系统运行的进程中执行操作。它只为这 些使用 Core Data 的进程记录数据。该 instrument 工具在它的实现上使用了 DTrace, 并可以导入一个 DTrace 脚本。

    详细面板的样本数据
    该 instrument 工具捕获以下信息:

    • Caller(调用者) 启动保存操作的方法的名称(包括栈跟踪信息)。
    • Save duration(保存耗时) 保存的耗时时间,以微秒为单位。

    跟踪面板的显示项
    跟踪面板可以被设置来显式以下任一信息数据:

    • Stack depth(栈深度) 栈调用的深度。
    • Thread ID(线程 ID) 线程标示符。
    • Save duration(保存耗时) 保存操作的消耗时间。

    2.Core Data Fetches

      Core Data Fetches instrument 工具记录 Core Data 应用中 取保存数据的操作。 该 instrument 工具可以运行在单一进程或所有系统当前运行的进程之上。它只会记 录使用 Core Data 的进程的数据。该 instrument 工具在实现上使用了 DTrace,并可 以导入 DTrace 脚本。

    详细面板的样本数据
    该 instruments 工具捕获以下信息:

    • Caller(调用者) 启动提取操作的方法名(包括栈跟踪信息)。
    • Fetch entity( 提取的条目) 被提取的条目的名称。
    • Fetch count( 提取总数) 提取条目的总数。
    • Fetch duration( 取耗时) 提取操作消耗的时长,以微秒为单位。

    跟踪面板的显式项
    可以设置跟踪面板来显式以下任何的数据:

    • Stack depth(栈深度) 栈调用的深度。
    • Thread ID(线程 ID) 线程标示符。
    • Fetch count( 取总数) 提取条目的总数。
    • Fetch duration(保存耗时) 提取操作的消耗时间。

    扩展详细面板的补充数据
    对于详细面板的条目,你可以打开它对于的扩展详细面板来查看调用的栈信息和对应事件发生的时间。

    3. Core Data Faults

      Core Data Faults instrument 工具记录 NSManagedObject 或它的一对多关系的 延迟初始化过程中发生的故障事件。该 instrument 工具可以运行在单一进程或所有系统当前运行的进程上面。它只收集使用了 Core Data 的进程的数据。该 instrument 工具的实现使用了 DTrace,并可以导入 DTrace 脚本。

    详细面板的样本数据
    该 instruments 工具捕获以下信息:

    • Caller(调用者) 触发故障的操作的方法名(包括栈跟踪信息)。
    • Fault object(故障对象) 引发故障的对象的名称。
    • Fault duration(故障耗时) 故障处理例程的执行时长(以微秒为单位)。
    • Relationship fault source(相关故障源)
    • Relationship(相关关系) 关系名称。
    • Relationship fault duration(相关故障的耗时)
      单位)。

    跟踪面板的显式项
    可以设置跟踪面板来显式以下任何的数据:

    • Stack depth(栈深度) 栈调用的深度。
    • Thread ID(线程 ID) 线程标示符。
    • Fault duration(故障耗时)
    • Relationship fault duration(相关故障的耗时)

    扩展详细面板的补充数据
      对于详细面板的条目,你可以打开它对于的扩展详细面板来查看调用的栈信息和对应事件发生的时间。

    4. Core Data Cache Misses

      Core Data Cache Misses instrument 工具记录高速缓存未命中导致的故障事件。 该 instrument 工具可以运行在单一进程或所有系统当前运行的进程上面。它只记录 使用了 Core Data 的进程。该 intrument 工具的实现使用了 DTrace,并可以导入 DTrace 脚本。

    注意:该 instrument 工具 供了 Core Data Fault instrument 工具 供的行为的一个子集, 但是它对你分析整个应用程序的性能更有帮助。

    ** 详细面板的样本数据**
    该 instruments 工具捕获以下信息:

    • Caller(调用者) 触发高速缓存未命中的方法名(包括栈跟踪信息)。
    • Cache Miss(高速缓存未命中) 引发高速缓存未命中的对象的名称。
    • CM duration(高速缓存未命中的耗时) 故障处理例程执行所用时长(以微为单位)。
    • RCM source(相关高速缓存未命中源) 高速缓存未命中的相关源。
    • RCM Relationship(相关高速缓存未命中关系) 关系名称。
    • RCM duration (相关高速缓存未命中耗时),相关高速缓存未命中的耗时(以微秒为单位)。

    跟踪面板的显式项
    可以设置跟踪面板来显式以下任何的数据:

    • Stack depth(栈深度) 栈调用的深度。
    • Thread ID(线程 ID) 线程标示符。
    • CM duration(高速缓存未命中耗时) 如上。
    • RCM duration(相关高速缓存未命中耗时) 如上。

    **扩展详细面板的补充数据 **
      对于详细面板的条目,你可以打开它对于的扩展详细面板来查看调用的栈信息和对应事件发生的时间。

    后记

    未完,待续~~~

    狗狗

    相关文章

      网友评论

        本文标题:INSTRUMENTS调试工具的使用(六)

        本文链接:https://www.haomeiwen.com/subject/guuhcxtx.html