You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何手动让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 12:45:03