標籤:
在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開啟這個檔案你就能開始分析資料了。GprofShark雖然方便易用,但它並不能告訴你同一個函數一共被Call了幾次和所有的Caller是誰這樣的資訊。為了得到這些資訊,你需要使用到如Gprof這樣的工具。Gprof的使用比較複雜,簡單的來說,你需要到Xcode的編譯器設定,開啟“Generate Profiling Code”設定。Gprof會在你的代碼裡添加一些額外的代碼來收集資訊,所以在你改了Xcode設定以後,你需要重新編譯。注意,如果你的應用程式來自多個Project,你需要更改所有你感興趣的Project的編譯設定。接下來,在重新編譯了以後,運行你的程式,完成後正常的退出程式(不然Gprof不一定能正確地產生Profiling檔案),Gprof會在可執行檔所在的檔案夾裡建立一個Gmon.out檔案。最後,你需要到Terminal裡運行Gprof命令來擷取可供人分析的檔案。Quartz ComposerQuartz 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甚至網頁的遊戲或其他互動式程式。
蘋果Instruments/Shark效能調試工具概述