卡顿监控不仅要捕获堆栈,还要找出最耗时的调用路径:
- 触发卡顿后基于 KSCrash 提取主线程调用堆栈,配合 dSYM 即可符号化到代码行。
- 监控线程在后台以约 50ms 的间隔持续抓取主线程快照并存入循环队列。
- 检测到卡顿时回溯队列,按以下规则寻找最耗时堆栈:
- 以栈顶函数作为堆栈特征,栈顶相同视为同一堆栈。
- 堆栈出现的重复次数 × 间隔时间近似为耗时。
- 重复次数相同时,取最近的一个作为最耗时堆栈。
- 该堆栈即被视作此次卡顿的根因依据,被打包上报。
此方法避免了仅获取卡顿瞬间堆栈而错过真正长耗时函数的问题。




