美文网首页
Time Profiler工具使用

Time Profiler工具使用

作者: love_night | 来源:发表于2021-07-05 13:07 被阅读0次

    按照固定的时间间隔,定时对线程中的调用堆栈进行采样,获取一个sample. 之后统计在这一时段内,某个方法出现在sample中次数。以此来表示该函数的运行情况


    image.png

    一、打开Instruments 再打开Time Profiler
    启动Xcode -> Instruments


    image.png Time Profiler的面板 image.png

    二、点击开始运行按钮,运行目标APP

    image.png

    Weight

    Doesn’t measure duration. Aggregates samples into a useful summary.

    weight的前面可以看到也有ms的时间。但是weight不代表duration. 这是 采样次数*采样间隔。采样间隔通常是1ms

    所以更合理的观察方法是参考Weight的百分比值。

    Self Weight

    该函数在自己的函数体内花费的时间。有的函数A内部只是简单调用其他函数B。这时A的Weight虽然可能高,但是它的Self Weight几乎为0. 可以进一步观察其子函数B. Weight高并且Self weight也高的是真正耗时的函数。

    Call Tree

    点击下方Call Tree按钮,可以看到有一些勾选项

    1. Hide System Libraries。
      这个很有用,可以屏蔽掉系统的的调用。这部分通常不是关注的

    2. Invert Call Tree
      堆栈默认是从上往下显示的。勾选这个后会反向显示,可以把耗时的子调用直接显示出来。

    3. 其他也有各自的功能

    图形显示区域

    1. 可以拖动游标,选定只观察某一个时间范围内的采样数据。
    2. 可以点击左侧MainThread栏,从而只观察发生在MainThread上的采样数据
    3. 使用option +option -zoom inzoom out
    4. 堆栈显示面板,按住option点击箭头,可以把子调用树全部展现,不用一级一级点。

    符号加载

    对检测到的我们项目自己的函数,Instrument有时显示的只是函数地址,这是因为app相关的符号文件没有加载进来。

    如果有app该版本的符号文件,可以 Menu -> Files -> Symbols。 分别选择app以及framework的符号文件。

    tips: 如果是debug模式的包,默认pod库编译的framework是没有符号的。如果需要,可以在Xcode的面板中选择 Pods -> Project Pods -> Build Settings -> Build Options -> Debug Information Format -> DWARF with dSYM File

    三、工具栏设置,方便快速定位问题


    image.png

    Separate by State : 线程分离,状态分开显示 ,例如:Running状态,
    Separate by Thread : 线程分离, 每个线程分开显示,只有这样 才能在调用路径中能够清晰看到占用CPU耗时最大的线程.
    Invert Call Tree : 从上到下跟踪堆栈信息.这个选项可以快捷的看到方法调用路径最深方法占用CPU耗时,比如FunA{FunB{FunC}},勾选后堆栈以C->B->A把调用层级最深的C显示最外面.
    Hide System Libraries : 隐藏系统调用,只关注自己代码的耗时
    Flatten Recursion : 递归函数, 每个堆栈跟踪一个条目
    Top Functions : 显示某个函数的总时间,A函数内调用多个函数时,可以显示A函数的总耗时

    四、查看详情 image.png

    相关文章

      网友评论

          本文标题:Time Profiler工具使用

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