zoukankan      html  css  js  c++  java
  • 苹果Instruments/Shark性能调试工具概述

    在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

     

    将不同的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甚至网页的游戏或其他交互式程序。
  • 相关阅读:
    HDU 5528 Count a * b 欧拉函数
    HDU 5534 Partial Tree 完全背包
    HDU 5536 Chip Factory Trie
    HDU 5510 Bazinga KMP
    HDU 4821 String 字符串哈希
    HDU 4814 Golden Radio Base 模拟
    LA 6538 Dinner Coming Soon DP
    HDU 4781 Assignment For Princess 构造
    LA 7056 Colorful Toy Polya定理
    LA 6540 Fibonacci Tree
  • 原文地址:https://www.cnblogs.com/jiayongqiang/p/5100763.html
Copyright © 2011-2022 走看看