苹果Instruments/Shark性能调试工具概述

时间:2022-06-30 10:57:58
在Mac OS X上你可以使用Gprof这样的UNIX工具用于测试程序性能。当然,Apple也有自己的Profiling Tools,用得比较多的是Shark。10.5里还引入了一个基于DTrace的叫Instruments的程序。

Instruments

自Xcode 3.0开始,苹果提供了一种非比寻常的方法来调试应用程序,这就是Instruments。就像它的名字一样(Instruments意为乐器),Instruments提供了一种像苹果的音乐创作软件GarageBand一样的带有时间线的界面,把应用程序的各种性能指标像乐谱一样可视化地记录下来。

Instruments能记录整个应用程序的运行情况,并将所有信息按照时间顺序并排地呈现出来,让你可视化的对比分析各种“乐器”(分析工具)——CPU使用率、网络、文件活动、内存分配等。由于这些信息的显示都按照时间对齐,你可以很快速的定位应用程序运行过程中的某个片段,比如看看上一个CPU占用高峰的时候磁盘正在做什么。如此全局观的审视应用程序运行状态,能帮助您更好的理解各种因果关系,提高软件性能。Instruments借助内建于操作系统中的万能辅助(Universal Access)功能,能够记录下应用程序运行过程中的用户交互操作,然后便可一遍遍地轻松重复同样操作。这样你就能随时为应用程序创建某种特定的测试。在Instruments中记录下应用程序的行为,修改代码,再返回重测看看修改效果。在模版中运行应用程序能让Instruments可视化地并排比对每次运行状态,从而清晰的获知修改代码带来的性能以及内存开销的变化。实际上多数Instruments分析工具都是使用DTrace来实现的,它是系统中全局的分析工具,能全面获取上层应用程序行为到底层操作系统内核的系统活动。你也能创建自己的分析工具,使用Instrument Builder来创建定制的强大分析工具。

Instruments中已经包含了以下六类的分析工具:

• 用户事件:追踪用户交互动作的精确事件,如鼠标点击等。
• CPU和进程:监视系统活动、采样、负载图表和线程。
• 内存:跟踪垃圾回收、对象分配和泄露。
• 文件活动:监视磁盘活动,读写和文件锁。
• 网络活动:衡量并记录网络流量。
• 图形:解释OpenGL驱动的内在工作。

Shark 

Shark可能是Mac开发者最喜欢使用的Profiling Tool了。Shark的User Guide上写到:“默认状态下,Shark通过定期的Interrupt每个处理器并对当前进程、线程、指令地址和函数 Callstack进行取样来创建Profile”。这意味着你并不需要对程序进行任何的修改或重编译就能使用Shark。并且,Shark对程序性能的影响很小,因为“所有的取样工作都在Kernel里完成并且是建立在硬件Interrupts的基础上”。因此,Shark对于找出程序中的“Hot-Spot”特别有帮助。

一般情况下,你只需要使用Shark的Time Profiling功能:运行你要测试的程序,然后运行Shark,选择你的应用程序所在的Process,然后按Start按钮开始取样。当你要结束取样时,按下Stop按钮,这时Shark会生成一个.mshark文件,里面有所有的Profiling数据。直接用Shark打开这个文件你就能开始分析数据了。

Gprof

Shark虽然方便易用,但它并不能告诉你同一个函数一共被Call了几次和所有的Caller是谁这样的信息。为了得到这些信息,你需要使用到如Gprof这样的工具。

Gprof的使用比较复杂,简单的来说,你需要到Xcode的编译器设定,打开“Generate Profiling Code”设置。Gprof会在你的代码里添加一些额外的代码来收集信息,所以在你改了Xcode设置以后,你需要重新编译。注意,如果你的应用程序来自多个Project,你需要更改所有你感兴趣的Project的编译设置。接下来,在重新编译了以后,运行你的程序,完成后正常的退出程序(不然Gprof不一定能正确地生成Profiling文件),Gprof会在可执行文件所在的文件夹里建立一个Gmon.out文件。最后,你需要到Terminal里运行Gprof命令来获取可供人分析的文件。

Quartz Composer

Quartz Composer是Mac OS 10.4引入的图形开发工具,QC使你能够方便地使用OS X各个级别的图形技术:你可以使用QC方便的整合Cocoa, Quartz 2D, Core Image, OpenGL和Quick Time技术。

一个QC Composition是由许多Patch和其联系构成的。每一个Patch如同一个函数,有Input和Output。Input可以来自于你输入的参数,也可以来自其他Patch的Output。QC自带有许多已经设计好的Patches,有用于捕获鼠标操作的,有用于处理图片的Filter,或是用于将内容渲染到屏幕上的Render等等。  

图3.1Patches

 苹果Instruments/Shark性能调试工具概述

将不同的Patch进行奇妙的组合,你会得到意向不到的效果。实际上已有不少DJ/VJ使用QC制作了很酷的根据音乐节奏变化的QC composition。

你可以使用Quick Time直接播放一个Composition文件(.qtz),也可以把其作为一个屏幕保护程序。当然,你也可以使用QCView或者QCLayer将其整合到你的Cocoa应用程序中去。 

Text Editors

尽管Xcode已经提供了一个相当不错的Build-In的文本编辑器,但你可能还是偏爱其他的编辑器。在Mac OS X下,你能找到很多其他很棒的编辑器。首先,如果你是一个UNIX程序员,你依然可以使用你最爱的Vi或者Emacs。你可以在Terminal下直接输入Vi或Emacs进入没有图形界面的版本。如果你是Emacs爱好者,你也可以使用Aquamacs Emacs或者Carbon Emacs两个不错的带图形界面的移植版本。

不过,目前Mac OS X上比较火的一个编辑器叫TextMate,这是一个Native Cocoa程序,拥有很多很Cool的功能。特别的,TextMate有很多专门针对Cocoa的Snippet(比如在.mm文件里你只用写Property的名字,然后按Tab键,就可以自动生成相应的Setter和Getter方法),你可以因此节省不少敲代码的时间。同时由于使用了Bundler, TextMate是可扩展,目前已经有许多开发者为其开发了支持各种语言的Bundle。因此,如果你主要工作在Mac OS X平台,同时敢于学习新的快捷键和操作方式,TextMate不失为一个很好的选择。



网页相关开发工具 

Apple有自己的一套有很长历史的叫做WebObjects的框架,其支持Ajax,J2EE等技术。全球最大的在线媒体商店iTunes Music Store就是使用WebObjects技术开发的。尽管WebObjects和Java有着密不可分的联系,开发WebObjects应用程序的最佳环境仍然是Xcode。

网页开发方面,Apple比较偏爱的是Ruby-on-Rail,Dojo这样比较新的技术,对其支持也比较好。工具方面,除了Adobe的软件以外,Mac也有像Coda(去年Apple Design Award获奖作品)这样简单易用的网页开发工具。 

其他开发工具

前面也提过,Mac OS X能找到大多数跨平台的开发工具,比如Java方面有Eclipse, NetBeans。数据库方面也有Oracle、MySQL、FileMaker等等数据库。这些工具的使用方法与在其他平台类似,这里不做具体介绍。

在脚本语言方面,Mac OS X支持传统的UNIX脚本语言,同时Apple也有自己的Apple Script语言。另外,还有F-Script这样专门针对Cocoa的脚本语言。

另外很值得一提的是一个叫Unity的用于游戏开发的IDE。Unity支持从Maya, 3DS Max, blender等等主流三维软件里导出的文件格式,使用改进过的JavaScript,有着完整的工作流程。而且可以编译适用于Mac, Window甚至网页的游戏或其他交互式程序。