卡顿分析支持自定义卡顿场景分析,支持收集线程快照与CPU使用率,在火焰图展示各个线程的函数执行情况,并允许数据分享。
目标
- 保留卡顿现场,及时分析卡顿原因
- 直观展示卡顿场景函数执行情况
- 竞品分析
使用流程
- 连接手机
- 开启测试
- 配置环境
- 数据采集
- 手动停止
- 符号化堆栈
- 数据展示
功能介绍

卡顿分析支持iOS的以下功能:
区域 | 功能 |
---|
工具栏 | 开始 & 结束测试 |
切换多个测试数据 |
堆栈搜索 |
数据分享 |
范围指示器 | 切换时间范围 |
图形区 | 各线程CPU使用率 |
线程状态时序(需开启线程状态采集) |
各线程函数调用火焰图 |
表格区 | CPU使用率详细数据 |
线程状态详细数据 |
函数调用树状图 |
辅助工具区 | 采集配置 & 符号化配置 |
自定义数据范围 |
线程筛选 |
数据采集
单击启动开始采集数据,需进入短暂的环境配置流程,配置完成后自动采集,既当看到以下界面时数据开启了采集。
- 由于数据量较大,且需要符号化才能有效消费,故采集完成后统一展现
- 右侧辅助工具区可配置是否采集线程线程状态(开启后数据量会增大)

手动单击停止按钮停止采集,默认最大采集时长10min。

如果测试时间过短或者App中开启了反调试将会提示以下信息:

符号化堆栈
以上采集的数据大部分为堆栈,需要符号化后才可消费。
- 自动匹配到dSym文件,直接单击符号化。
- 自动匹配能力需测试debug包或者用14.6以上系统测试任意包。
- Debug包本地编译请先确认编译选项开启dSYM文件生成,
target
->Build Settings
->Debug Information Format
->DWARF with dSYM File
,编译后dSYM文件路径在Products目录下(与.app同级目录)。

- 未自动匹配dSym文件,手动选择dsym文件路径并进行符号化。

- 右侧辅助工具区配置符号化选项。
- 默认只符号化App的堆栈,系统堆栈的符号化需单独开启。
功能适用规则和以上自动匹配到dSym文件规则一致,将使用xcode中device surpport中的framework进行符号化,如若没有指定系统的device surpport,也是无法符号化系统堆栈 - 默认未符号化的数据不会展示,可配置展示所有数据,为符号化数据将只是地址及lib名称。
数据展示
工具栏

- 函数搜索,支持正则匹配,由于搜索数据量较大,需输入关键词后按下回车才进行搜索
- 搜索词以左侧标签展示,单击标签取消搜索
- 左右切换搜索结果,可快速选中对应函数
- 火焰图中未匹配函数置灰,匹配函数高亮
- 树状图中匹配词高亮
- 线程筛选中未匹配线程划线标识
范围指示器
- 悬浮上面可见对应时刻的CPU使用率
- 框选指定区间可将图&表区数据缩放到指定区间
- 双击还原成默认区间
图形区

- 默认展示CPU使用率,悬浮可见具体值,单击可展示对应数据在表格区的位置。
- 开启配置后可展示线程状态时序,悬浮可见具体状态与耗时,单击可展示对应数据在表格区的位置。
- 线程火焰图(火焰向下生长即为函数调用关系)
- 可单独折叠展开
- 火焰图区间内可通过触摸板手势拖动&缩放、Ctrl+滚轮进行缩放、快捷键WASD缩放与移动
- 悬浮可见具体函数与耗时
- 单击可展示对应数据在表格区的位置,并展开对应调用栈
说明
多个火焰图同时展示或火焰图过于复杂,可能导致界面交互卡顿,建议分多次测试,减少单次测试时长。
表格区

- CPU与线程状态的详细数据,可进行数据排序
- 函数调用树状图
- Self Time 该函数本身执行耗时,不包含子函数耗时情况,用于区分慢函数的卡顿原因,百分比为测试区间占比
- Total Time 该函数的整体耗时,百分比为测试区间占比
- Times 该函数在同一调用层级的出现次数,用于排查低消耗高频卡顿场景
- Functions 函数名称 & 所在的lib名称,可展开子函数的调用
- 聚类规则(可通过下文介绍的面包屑切换)
- Call Tree 既正常函数调用关系
- Bottom up 反转调用栈,用户聚类底层调用,排查低消耗高频卡顿场景
- 表格区包含以上3中数据,可通过面包屑切换
- 表格上方的面包屑 (线程信息 > 数据类型 > 辅助选项)
- 切换数据除了上文中提及的单击指定图形区外,还可通过面板屑中的数据类型切换
辅助工具区