Apple性能分析和调试工具Instruments
Apple性能分析和调试工具Instruments

Apple性能分析和调试工具Instruments

Instruments 是 Apple 提供的一个强大性能分析和调试工具,随 Xcode 一起提供,用于分析 iOS、macOS、watchOS 和 tvOS 应用的运行时行为。

可以用 Instruments 来找出:

1、性能瓶颈(卡顿、CPU 爆高)。

2、内存泄漏(Memory Leak)。

3、内存使用过大(Memory Usage)。

4、线程死锁、线程竞争。

5、UI 卡顿(帧率低)。

6、不必要的磁盘读写。

7、音频、网络延迟问题。

打开方式

有两种方式打开:

方式一:从Xcode启动

在 Xcode 菜单栏:

Product > Profile (快捷键 Cmd + I)

或菜单栏:

Xcode > Open Developer Tool > Instruments

方式二:单独启动

也可以在“聚焦”(快捷键Command + Space空格)上搜索 “Instruments” 启动它:

/Applications/Xcode.app/Contents/Applications/Instruments.app

Instruments 的核心构件:Template 模板

Instruments 提供很多预设的「分析模板」,每个模板分析不同维度。常用的有:

1、Game Performance

用途:用于游戏的整体性能分析。

分析内容:帧率(FPS)、GPU/CPU 协同情况和图形管线效率(Metal)。

适合人群:使用 SpriteKit、SceneKit、Metal、Unity 开发游戏的开发者。

2、Leaks

用途:检测内存泄漏。

分析内容:哪些对象未被释放(Leak),对象在哪分配的。

可以精确指出泄漏位置,建议配合 Allocations 一起使用。

3、Logging

用途:收集 os_log / print / Logger 输出。

分析内容:自定义日志、性能标记(signpost)和分析 Timeline 上的事件流。

Swift 的 Logger 框架(os.Logger) 推荐用法。

4、Metal System Trace

用途:分析 Metal 渲染性能、同步问题。

分析内容:GPU 各阶段耗时,CPU 和 GPU 是否同步良好,shader 执行延迟。

游戏 / 图形应用必须掌握的工具。

5、Network

用途:分析网络请求的性能与使用。

分析内容:请求时间、耗时、状态码,DNS、TLS 握手、重定向等细节,DataTask / DownloadTask 记录。

支持 HTTP 和 App Transport Security (ATS)。

6、Processor Trace

用途:低层级指令级别 CPU 跟踪(极少数人使用)。

分析内容:CPU 指令执行记录(仅在支持的硬件上)。

用途非常专业,主要用于编译器、JIT、内核开发分析。

7、RealityKit Trace

用途:专用于分析 RealityKit 应用(AR/VR)。

分析内容:Entity 生命周期,渲染时序,Anchor 动态等。

仅用于 ARKit + RealityKit 开发者。

8、SceneKit

用途:分析使用 SceneKit 渲染的 3D 内容。

分析内容:节点更新耗时,Scene Graph 结构问题,渲染卡顿点。

建模、AR、3D 可视化类 App 会用到。

9、Swift Concurrency

用途:分析 async/await、Task 等 Swift 并发结构的执行流程。

分析内容:Task 创建、执行、挂起、恢复,Actor 内部调度顺序,不可预测的切换点。

Swift 5.5+ 并发代码的调试利器。

10、SwiftUI

用途:分析 SwiftUI 应用的性能瓶颈。

分析内容:View 重绘频率,Diffing(视图比较)耗时,Transaction 动画延迟。

能看到“哪些 View 更新太频繁”,非常适合 SwiftUI 调优。

11、System Trace

用途:全面的系统级性能分析工具。

分析内容:线程调度,CPU 占用,IO、断电、上下文切换等。

系统级别的最强分析器(适合高级用户)。

12、Time Profiler

用途:分析函数级别的 CPU 使用时间。

分析内容:哪个函数最耗时,CPU 使用率高的代码栈,具体函数执行时间(可展开调用栈)。

最常用的性能分析工具,Swift/ObjC/系统调用都支持。

13、Zombies

用途:检测已经被释放但仍被访问的对象(野指针)。

分析内容:“EXC_BAD_ACCESS” 原因,Zombie 对象的分配与释放路径。

在 ARC 和 ObjC 混用下非常有用(但 Swift 时代已不太常见)。

使用教程

在Xcode中打开项目,选择要分析的Scheme(macOS应用)。

使用快捷键:⌘ + I(Command + I),弹出Instruments 应用,这里选择“SwiftUI”分析模板。

双击“SwiftUI”分析模版,进入Instruments界面。

在Instruments界面,点击左上角的Record按钮,开始录制。

Instruments会自动打开App,在App中执行需要调试的操作(如点按钮跑循环),执行完毕后,回到 Instruments,再次点击左上角的Stop停止录制按钮。

这时,可以在Instruments界面查看:

1、哪些函数最耗时。

2、哪些系统 API 被频繁调用。

3、函数调用路径(调用栈)。

4、UI 更新或后台逻辑是否占用主线程。

如果看到主线程有大量 CPU 使用,说明有优化空间。

总结

通过Instruments可以实现检测泄漏对象、SwiftUI性能等功能,根据需求选择Instruments对应的分析模版。

在Instruments界面中,可以通过左上角的按钮栏,实现运行、停止、快照等控制分析。

中间时间轴,随时间变化用于显示分析数据。

在时间轴左侧选择分析的对象类型,底部显示对象列表,双击对象列表的数据可以显示详细信息。

相关文章

Profiling apps using Instruments:https://developer.apple.com/tutorials/instruments

   

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开发者。

欢迎加入我们的 微信交流群QQ交流群,交流更多精彩内容!
微信交流群二维码 QQ交流群二维码

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注