INSTRUMENTS调试工具的使用(六)

版本记录

版本号 时间
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(相关高速缓存未命中耗时) 如上。

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

后记

未完,待续~~~

狗狗
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容