关于 instruments-profiling
instruments-profiling 是一项用于分析 macOS 和 iOS 原生应用性能及调用栈的技能,主要使用 Time Profiler 和 xctrace 命令行工具。它指导开发者选择目标应用二进制文件、采集跟踪数据,并导出采样供后续分析。
主要功能
- 01通过启动或附加进程记录 Time Profiler
- 02选择采集目标应用或二进制文件
- 03从跟踪数据导出时间采样
- 04通过命令行检查和汇总调用栈
- 05使用 xctrace 分析 iOS 设备
适用场景
- 01采集应用启动或缓慢操作的性能数据
- 02避免分析到错误的已安装应用版本
- 03导出调用栈以供离线分析或比较
- 04分析运行于 iOS 设备上的应用
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ steipete/ agent-scripts --skill instruments-profiling安装后在 Claude Code 中输入/instruments-profiling确认已加载。
详细介绍
Instruments 性能分析(macOS/iOS)
当用户需要对原生应用进行性能分析或堆栈分析时,使用此技能。
重点:Time Profiler、xctrace CLI,以及选择正确的二进制文件/应用实例。
快速入门(CLI)
- 列出模板:
xcrun xctrace list templates - 录制 Time Profiler(启动应用):
xcrun xctrace record --template 'Time Profiler' --time-limit 60s --output /tmp/App.trace --launch -- /path/To/App.app
- 录制 Time Profiler(附加到进程):
- 手动启动应用,获取 PID,然后:
xcrun xctrace record --template 'Time Profiler' --time-limit 60s --output /tmp/App.trace --attach <pid>
- 在 Instruments 中打开跟踪文件:
open -a Instruments /tmp/App.trace
注意:xcrun xctrace --help 不是有效的子命令。请使用 xcrun xctrace help record。
选择正确的二进制文件(至关重要)
注意:Instruments 可能会分析错误的应用(例如 /Applications 中的应用),因为 LaunchServices 可能解析到其他应用包。
请遵循以下规则:
- 优先使用二进制文件的直接路径,以确保启动目标明确:
xcrun xctrace record ... --launch -- /path/App.app/Contents/MacOS/App
- 如果启动
.app,请确保它是目标应用包:open -n /path/App.app- 使用
ps -p <pid> -o comm= -o command=验证
- 如果
/Applications/App.app和本地构建版本同时存在,请明确指定本地构建版本的路径。 - 启动后,先确认进程路径,再采信跟踪结果。
命令参数(xctrace)
--template 'Time Profiler':模板名称,来自xctrace list templates。--launch -- <cmd>:--后的所有内容都是目标命令(二进制文件或应用包)。--attach <pid|name>:附加到正在运行的进程。--output <path>:.trace输出路径。若省略,文件会保存到当前工作目录。--time-limit 60s|5m:设置采集时长。--device <name|UDID>:在 iOS 设备上运行时必需。--target-stdout -:将已启动进程的标准输出流式传输到终端(适用于 CLI 工具)。
导出堆栈(CLI)
- 检查跟踪表:
xcrun xctrace export --input /tmp/App.trace --toc
- 导出原始时间分析样本:
xcrun xctrace export --input /tmp/App.trace --xpath '/trace-toc/run[@number="1"]/data/table[@schema="time-profile"]' --output /tmp/time-profile.xml
- 使用脚本(Python/Rust)进行后处理,汇总堆栈。
Instruments UI 工作流
- 模板:Time Profiler
- 使用“Record”并采集运行缓慢的路径(启动与稳定运行阶段)
- 调用树提示:
- 隐藏系统库
- 反转调用树
- 按线程分开
- 重点查看热点帧和调用次数
注意事项与修复方法
- 分析了错误的应用:LaunchServices 解析到已安装的应用,而不是本地构建版本。
- 修复:使用二进制文件的直接路径,或通过已知 PID 使用
--attach。
- 修复:使用二进制文件的直接路径,或通过已知 PID 使用
- 没有样本/跟踪为空:应用快速退出,或没有执行任何工作。
- 修复:延长采集时间,并在录制期间触发工作负载。
- 隐私提示:
xctrace可能需要“开发者工具”权限。- 修复:系统设置 → 隐私与安全性 → 开发者工具 → 允许 Terminal/Xcode。
- XML 导出文件过大:
time-profile导出的文件可能非常大。- 修复:使用 XPath 进行筛选,并离线汇总;不要输出到终端。
iOS 特定说明
- 设备:使用
xcrun xctrace list devices和--device <UDID>。 - 如有需要,通过 Xcode 启动;使用
xctrace --attach附加到进程。 - 确保有调试符号,以便获得有意义的堆栈。
验证清单
- 确认跟踪进程路径与目标构建版本一致。
- 确认堆栈中显示了预期的应用帧。
- 确认采集覆盖了运行缓慢的操作(启动/刷新)。
- 如果正在进行优化,请导出堆栈以便自动比较。
评论
支持 Markdown