INSTRUMENTS调试工具的使用(八)

版本记录

版本号 时间
V1.0 2017.06.24

前言

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

这一篇就先说一下文件系统相关和垃圾回收相关

十九、File System Instruments[文件系统相关]

该部分的 instruments 工具分析文件系统的信息和活动,比如读和写操作,权限等。

I/O 活动(I/O Activity)

  I/O Activity instrument 工具记录 I/O 事件:函数调用,比如在文件系统上面 的 read、write、open、close 等操作。你可以使用该 instrument 工具来启动和样本 分析单个运行在 iOS 设备上面的进程。尽管 I/O Activity instrument 工具 供了 一个调用树的回溯跟踪视图,在 Mac OS X 上有类似 I/O Activity instrument 工具 的 fs_usage 实用工具。

  在详细面板,你可以选择以下的一个或多个类别,每个类别包含了一组探针 (probes)(BSD 函数)。

  • File Attributes(文件属性)

    • getattrlist
    • setattrlist
    • listxattr
  • File Permissions(文件权限) chmod

  • fchmod

  • chown

  • fchown

  • access

  • Open and Close(打开和关闭文件)

  • open

  • fdopen

  • fopen

  • freopen

  • close

  • fclose

  • Other(其他)

    • lseek
    • fsync
    • dup
    • dup2
    • link
    • unlink
  • Read and Write(读写操作)

  • read

  • pread

  • readv

  • write

  • pwrite

  • writev

  • Shared Memory(共享内存)

    • shm_open
    • shm_unlink
  • Sockets(套接字)

    • recv
    • recvfrom
    • recvmsg
    • send
    • sendmsg
    • sendto
  • Stats(统计)

    • lstat
    • lstat64
    • stat
    • stat64
    • fstat
    • fstat64

I/O Activity instrument 工具捕获以下信息:

  • Function(函数):被调用的函数的名称。
  • Duration(时长):函数调用的时长。
  • In File(输入文件):输入文件描述符。
  • In Bytes(输入字节):要求读或写的字节的数量。
  • Out File(输出文件):输出文件描述符。
  • Out Bytes(输出字节):实际读或写的字节数量。
  • Thread ID(线程 ID):线程的标示符。
  • Stack Depth(栈深度):函数调用期间使用的栈帧的数量。
  • Error(错误):函数调用期间最近出现的错误。
  • Path(路径):可执行文件执行操作的文件路径。
  • Parameters(参数):函数调用的参数。对于特定函数的参数的描述,参阅相应API文档。

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

  • Sample number(样本数量)
  • Call duration(调用时长)
  • Input file descriptor(输入文件 述符)
  • Input bytes(输入字节)
  • Output file descriptor(输出文件 述符)
  • Output bytes(输出字节)
  • Thread ID(线程 ID)
  • Stack depth(栈深度)

  对于任何函数的调用,你可以打开该调用的对应扩展详细面板来查看整个调用的回溯跟踪信息。该 instrument 工具还在详细面板提供了一个调用树视图。I/O Activity instrument 工具某些时候被用来配合其他 iOS instruments 工具使用。比如,你可以配合使用 I/O Activity instrument 工具和 OpenGL ES Driver instrument 工具来检查纹理加载进程。

文件锁(File Locks)

  File Locks instrument 工具记录调用 flock 函数时咨询文件锁的操作。该 instrument 工具可以运行在单个进程或所有当前系统运行的进程上面。该 instrument 工具的实现使用了 DTrace,并可以导入 DTrace 脚本。

该 instrument 工具捕获以下信息:

  • 函数名称
  • 函数调用者(包括可执行文件名称和栈跟踪信息)
  • 锁住的文件路径
  • 操作类型,它是一个整形变量,有以下相应的值(包括这些值的组合):
    • 共享锁
    • 独占锁
    • 不阻塞锁
  • 解锁

跟踪面板可以被设置来显示以下的数据:

  • 栈深度(Stack depth)
  • 线程 ID(Thread ID)
  • 时间戳(Timestamp)

文件属性(File Attributes)

  File Attributes instrument 工具记录文件系统中文件的所有者和访问权限的改 变事件。该 instrument 工具可以运行在单个进程或所有当前系统运行的进程上面。 该 instrument 工具的实现使用了 DTrace,并可以导入DTrace 脚本。该 instrument工具关于每个函数调用的以下信息:

  • 通过chmod和fchmod函数修改的文件权限
  • 通过chown和fchown函数修改文件所有者和所在的组

对于每个函数调用,instrument 工具捕获以下信息:

  • 函数的名称
  • 函数的调用者(包括可执行文件的名称和栈跟踪信息)
  • 可执行文件操作的文件路径
  • 被修改的文件的文件 述符
  • 模式标志,它指示了可以在文件上面应用的权限(该值只在调用fchmod的chomod时才被捕获)
  • 文件的新的所有者的用户ID(该值只在调用fchown的chown时才被捕获)
  • 文件的新组的组ID(该值只在调用fchown的chown时才被捕获)

跟踪面板可以被设置来显示以下的信息:

  • 栈深度(Stack depth)
  • 线程 ID(Thread ID)
  • 文件 述符(File descriptor)
  • 模式(Mode)
  • 用户 ID(User ID)
  • 组 ID(Gopup ID)

文件活动(File Activity)

  File Activity instrument 工具可以让你监听文件的访问。该 instrument 工具 可以运行在单个进程或系统所有当前运行的进程之上。该 instrument 的实现使用了 DTrace,并可以导入 DTrace 脚本。该 instrument 工具捕获以下函数的调用信息:

  • 打开和新建一个可以读取或写入的文件(open)。
  • 删除从每个进程的引用表的 述符(close)
  • 获取关于一个文件的信息(fstat)

对于每个函数的调用,该 instrument 捕获以下的信息:

  • 函数的名称
  • 函数的调用者(包括可执行文件的名称和栈跟踪信息)
  • 可执行文件操作的文件路径
  • 文件的文件描述符

跟踪面板可以被设置来显示以下的数据:

  • 栈深度(Stack depth)
  • 线程 ID(Thread ID)
  • 文件描述符(File descriptor)

目录I/O(Directory I/O)

  Directory I/O instrument 工具记录目录的相关操作,比如移动目录,创建符合连接等等。该 instrument 工具可以运行在单个进程或所有当前系统运行的进程之上。 该 instrument 工具的实现使用了 DTrace,并可以导入 DTrace 脚本。

该 instrument 工具捕获以下函数的调用信息:

  • delete - 删除一个文件和目录
  • link - 创建一个硬连接或符合连接
  • mkdir - 创建一个目录
  • mount - 挂载一个文件系统
  • rename - 修改一个文件或目录的名称
  • rmdir - 移除一个目录
  • symlink - 新建一个符合连接
  • unlink - 移除一个连接
  • unmount - 卸载一个文件系统

对于每个函数的调用,该 instrument 捕获以下的信息:

  • 函数的名称
  • 函数的调用者(包括可执行文件的名称和栈跟踪信息)
  • 可执行文件操作的文件或目录的路径
  • 新文件或目录的名称(在适当情况下)

跟踪面板可以被设置来显示以下的数据:

  • 栈深度(Stack depth)
  • 线程 ID(Thread ID)

二十、Garbage Collection Instruments[垃圾回收相关]

  该部分的 instruments 收集由垃圾回收器回收内存的信息。为了使用这些 instruments 工具,程序必须是建立在垃圾回收器之上并启用垃圾自动回收功能。关于编写一个垃圾回收器的程序,参阅 Garbage Collection Programming Guide。

GC Total

  GC Total instrument 工具追踪所有由垃圾回收器分配和释放的对象或字节的总数量。该 instrument 工具可以运行在单个进程或所有当前系统运行的进程之上。该 instrument 工具的实现使用了 DTrace,并可以导入 DTrace 脚本。它记录只启用了垃 圾回收的进程的数据。

该 instrument 工具捕获以下信息:

  • 对象初始化和回收函数(包括栈跟踪信息)
  • 有垃圾回收器回收的对象的数量
  • 由垃圾回收器回收的全部字节的数量
  • 全部已分配且仍然使用中的自己数量
  • 全部已经回收和正在使用中的字节的数量

跟踪面板可以被设置来显示以下数据:

  • 栈深度(Stack depth)
  • 线程 ID(Thread ID)
  • 回收的对象(Objects reclaimed)
  • 回收的字节(Bytes reclaimed)
  • 正在使用的字节(Bytes in use)
  • 全部字节(Total bytes)

垃圾回收(Garbage Collection)

  Garbage Collection instrument 工具测量垃圾回收器清除阶段的回收数据。该 instrument 工具可以运行在当个进程或所有当前系统运行的进程之上。该 instrument 工具的实现使用了 DTrace,并可以导入一个 DTrace 脚本,它只记录启动了垃圾回收的进程的数据。

该 instrument 工具捕获以下信息:

  • 对象的初始化和回收函数(包括栈跟踪信息)
  • 分配内存的区(zone)
  • 事件是否是分代的(1为YES,0为NO)
  • 由垃圾回收器回收的对象的数量
  • 由垃圾回收器回收的字节的数量
  • 清除时间的持续时间(以微秒为单位)

跟踪面板可以被设置来显示以下信息:

  • 栈深度(Stack depth)
  • 线程 ID(Thread ID)
  • 区(Zone)
  • 是否分代(Is generational)(分代回收器查找由非分代回收器错过的不在使用 的比较旧的对象,但它需要运行更长的时间,所以不经常运行)
  • 回收的对象(Objects reclaimed)
  • 回收的字节(Bytes reclaimed)
  • 持续时间(Duration)

后记

未完,待续~~~

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

推荐阅读更多精彩内容