如何手动让Xcode Time Profiler停止在指定代码行?
Time Profiler 指定位置停止录制的可行方案
方法1:断点触发停止(无需修改代码,最推荐)
不需要改动业务代码,通过断点配置即可实现:
- 在你需要停止录制的代码行添加普通断点
- 右键点击断点,选择「编辑断点」
- 点击「添加操作」,操作类型选择「Instruments」,子选项选择「Stop Recording」
- 勾选「执行操作后自动继续」,避免断点卡住程序运行
触发到该断点时,Time Profiler会自动终止录制,直接展示到该位置为止的所有采样数据。
方法2:代码主动触发停止
如果需要通过代码逻辑控制停止时机,可以调用Instruments官方提供的控制接口:
Objective-C 代码
// 仅Debug环境引入,上线移除该依赖 #import <Instruments/Instruments.h> // 要停止录制的位置调用 [Instruments stopRecording];
Swift 代码
需要先创建Objective-C桥接头文件引入上述头文件,再调用:
// 停止录制 Instruments.stopRecording()
方法3:崩溃触发停止(适配fatalError思路)
如果不需要保留触发位置之后的程序运行状态,可以直接在指定位置添加fatalError():
// 执行到该位置时程序崩溃,Time Profiler会自动停止录制 fatalError("主动终止Profiler录制")
该方法使用后需及时移除相关代码,避免线上问题。
补充优化技巧
如果只是需要定位指定代码段的性能数据,不需要停止录制,也可以通过os_signpost标记感兴趣的区间:
import OSLog private let perfLog = OSLog(subsystem: "你的App Bundle ID", category: .pointsOfInterest) // 要分析的代码段起始位置 os_signpost(.begin, log: perfLog, name: "待分析主线程任务") // 你的业务代码逻辑... // 代码段结束位置 os_signpost(.end, log: perfLog, name: "待分析主线程任务")
标记完成后Time Profiler的时间轴会高亮显示该区间,直接选中区间即可过滤出对应时间段的采样数据,分析效率更高。
内容的提问来源于stack exchange,提问作者Zigii Wong
相关产品推荐
相关产品推荐

