蘋果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甚至網頁的游戲或其他交互式程序。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM