iOS 調試工具


  • 儀表

   xcode5 引入了調試儀表,通過儀表可以直觀的看出應用的CPU和內存占用量。運行一個程序,點擊儀表欄。可以發現當程序處於運行狀態時,調試導航面板會以柱狀圖顯示CPU和內存占用量,並隨着應用實時更新占用量數據。需要注意的是,調試導航面板中的數據是根據應用的硬件計算出來的,蘋果電腦的CPU比iOS設備更快,如果在iOS模擬器上運行應用,調試導航面板中顯示的CPU贊用量可能非常低,不低於分析性能問題。

  點擊CPU可以在編輯區域打開CPU占用量報告。

  •   占用百分比(Precentage Utilized)

  根據運行應用設備的CPU核心數顯示CPU占用比。例如,單核設備中最大CPU占用量是100%,而對雙核設備中是200%,所以應用在單核設備中的CPU占用量通常比雙核設備更高。如果應用處於空閑狀態(進入后台活沒有操作),CPU占用量會顯示0%。

  •   占用環比(Utilization Comparison)

  使用環比圖比較應用與系統中其他進程(Process)的CPU占用百分比。如果應用的CPU占用百分環比不高,但是運行不通暢,那么可以從該環形圖中查看Other Processes的占用百分比。如果設備中后台運行的其他應用太多 ,就可能導致Other Processes的占用百分比很高,應用運行速度變慢。

  •   時間-占用比(Utilization over Time)

  使用折線圖顯示應用CPU占用量隨運行時間變化的過程,以及占用量在運行時間內的峰值和谷值。

  •   線程(Threads)

  顯示應用中每一個線程的時間-占用比。

  

  接下來我們打開我們應用 JXTouchTracker ,用手指在應用中繪制線條,手指不要離開屏幕,持續繪制大量線條可以發現應用的CPU占用比迅速升高-手指在屏幕上移動時,JXDrawView會不斷收到 touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event 消息並調用 drawRect:(CGRect)rect 重繪自己。繪制的線條越多, drawRect:(CGRect)rect 的工作量就越大,CPU占用比就越高。

  回到吊事導航面板,點擊Memory,打開內存占用量報告,如圖:

  和CPU占用量報告類似,內存占用量報告直接的顯示了應用內存占用的情況,但是Memery部分(位於最下方)顯示的折線圖可能會讓我們誤解:應用似乎始終占用了100%的內存。實際上,途中將運行時間內的占用峰值作為100%顯示,因此途中y周的最大值與左側High欄中顯示的數值相同都是58.2MB。

  無論開發何種類型的應用,都應該盡可能降低CPU和內存占用量,提高應用的流暢度和用戶體驗。

 

  • Instruments

  從儀表和占用量報告中可以簡要分析出應用的性能,但是,如果應用的CPU和內存占用量過高,需要從代碼中查找性能問題,則可以使用 Instruments ,他提供了比儀表和占用量報告更詳細的數據分析。

   Instruments 是一中與Xcode緊密集成的調試工具,可以實時監控並統計應用運行時的各項數據,生成詳細的分析報告。它由若干組件組成,這些組件檢查的事項包括:應用創建了那些對象,每一個方法和函數的CPU占用量、文件I/O和網絡I/O等。通過使用這些不同的組件,可以找出程序中的性能瓶頸,發現代碼中的問題。

  •  Allocations 組件

   Allocations 組件可以列出應用創建過的全部對此昂,以及這些對象所占用的內存大小。

  當監視某個應用時, Allocations 組件會對這個應用進行性能分析。雖然可以在模擬器上對某個應用進行性能分析,但是在真是的設備上進行可以得到更精確的數據。

  要對當前打開的項目執行性能分析,可以按住位於坐上角的 Run 按鈕不放,然后在新出現的彈出窗口中選擇 Profile

  Xcode會啟動 Instruments 。 Instruments 會顯示一個下拉窗口並列出所有可用的組件。選中 Allocations 。之后 Instruments 會啟動應用並打開 Instruments 的主窗口。

 

 

   Allocations 組件會顯示一張表格,流出應用 執行過的所有內存分配。因為數據比較多,所以先過濾,只列出由我們自己編寫的代碼創建的對象。首先在JXDrawView對象上畫若干線條。然后在窗口 Category 查詢框中輸入 JXLine 

   Allocations 組件會過濾  Object Summary 表格所顯示的條目,只列出和 JXLine 右端的內存分配,即我們自己創建的 JXLine 對象。

   #Persistent 列會顯示某種對象的現存個數。 Persistent Bytes 列會顯示這些現存對象占用了多少內存。 # Total 列會顯示應用運行至今共創建了多少個某種類型的對象(其中包括已經釋放的對象)。


免責聲明!

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



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