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)

后记

未完,待续~~~

金色世界
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容