版本記錄
版本號 | 時間 |
---|---|
V1.0 | 2017.06.19 |
前言
我們在做app的時候,不是做完功能就結束了,很多時候是需要進行檢查和優化的,而xcode自帶了一個很好的檢查工具,可以檢測內存泄漏。還可以查看哪一個方法比較耗時。還可以檢測離屏渲染等等,隨后的幾篇我們就說一下這個工具的使用。先給出官方指導文檔
這一篇就先說一下instruments的簡單實用。
一、 認識instruments
Instruments 是應用程序用來動態跟蹤和分析 Mac OS X 和 iOS 代碼的實用工具,可以幫你更好的理解應用程序和操作系統的行為。你可以使用它來跟蹤同 一進程不同方面的行為。你也可以記錄一系列用戶界面的動作并響應它們,同時也可以使用一個或多個 instruments 工具來收集數據。instruments 工具適用于xcode3.0和Mac OSX10.5。
Instruments 可以實現下面功能:
- 分析一個或多個進程的行為。
- 記錄一系列用戶的動作并響應它們,可靠的再現這些事件并收集多次運行的數據。
- 創建你自己自定義的 DTrace instruments 來分析系統和應用程序的行為。
- 保存用戶界面記錄和instruments的配置為模板,并從Xcode里面訪問。
- 追查代碼中難以重現的問題。
- 對你的程序進行性能分析。
- 自動化測試你的代碼。
- 對你程序進行壓力測試。
- 進行一般的系統級故障診斷。
- 對你的代碼如何工作有更深入的了解。
每個 instruments 收集和顯示不同類型的數據,比如文件訪問、內存使用等等。 Instruments 包括一個標準 instruments 工具庫,你可以使用它分析你代碼的很多方 面。你可以配置 instruments 來收集關于同一個或者不同系統進程的數據。你可以使 用自定義的 instruments 工具新建接口來創建新的自定義 instruments 工具,它使用 DTrace 程序來收集你想要的數據。
所有 Instruments 的工作都在一個跟蹤文檔(trace documents)里面完成。一 個跟蹤文檔收集那些被 instruments 聚集的與該文檔有關的數據。每個跟蹤文檔通常 包含一個會話的價值數據,這也是作為一個單一的跟蹤。你可以保存跟蹤文檔到你已 經收集的跟蹤數據備份里面,然后可以在以后再次打開并查看它們。
盡管大部分的 instruments 工具旨在收集數據,但是其中最精密的 instruments 工具可以幫助自動化收集數據。
二、啟動instruments
1.從Finder啟動
可以在Finder里面雙擊Instruments應用的圖標來啟動,如下圖所示。
選擇相應的app,雙擊打開即可。
2.從xcode啟動
它也可以從xcode啟動,如下圖所示。
不管是哪種啟動,最后啟動后都是如下的畫面。
三、創建跟蹤文檔
??當你啟動 Instruments 后,應用會自動為你創建一個文檔。你同樣可以通過選擇 File > New 來創建一個新的文檔。你每創建一個新的文檔,Instruments 都會 示你選擇一個開始模板。這些模板 定義了一些你將要在你的跟蹤文檔里面使用的 instruments 工具集。Instruments 供了幾種不同的模板。
下面我們就看一下開始模板。
項目 | 詳情 |
---|---|
1.Blank | 創建一個空的模板,你可以自定義的添加各種工具。 |
2.Activity Monitor | 可以只用這個模板,研究系統工作負載和虛擬內存大小的關系 |
3.Allocations | 將Allocations和VM跟蹤器加到跟蹤文檔中,使用該工具可以監視內存和對象的內存分配方式和情況。 |
4.CocoaLayout | 是一種Cocoa布局工具 ,可以應用于iOS模擬器和Cocoa桌面應用,但是不能和連接的iOS設備一起使用。觀察NSLayoutConstraint對象的改變,幫助我們判斷什么時間什么地點的constraint是否合理 |
5.Core Animation | 將CoreAnimation加入到跟蹤文檔中,可以測量ios設備上每秒的CoreAnimation幀數,這可以幫助你理解內容是如何渲染到屏幕上的,(圖形性能)這個模塊顯示程序顯卡性能以及CPU使用情況。 |
6.CoreData | 將CoreData數據提取、緩存缺失和存儲加入到跟蹤文檔中,使用這個工具可以檢測應用程序中數據的存儲交互。 |
7.Counters | 收集使用時間或基于事件的抽樣方法的性能監控計數器(PMC)事件。 |
8.Energy Log | 耗電量監控,將Energy Diagnostics, CPU Activity, Display Brightness, Sleep/Wake, Bluetooth, WiFi, and GPS instruments加入到跟蹤文檔中進行檢測。 |
9.File Activity | 將File Activity, Reads/Writes, File Attributes, and Directory I/O instruments 加入到跟蹤文檔中,只用這個模板可以讓你檢查系統文件的使用情況,可以檢查文件的打開、關閉、讀和寫操作,同時也可以檢測文件系統本身的改變,包括權限和所有權發生的改變。 |
10.Leaks | 將the Allocations and Leaks instruments加入到模板中,使用這個模板可以幫助你檢測內存的泄漏。 |
11.Metal System Trace | 它是是apple 2014年在ios平臺上推出的高效底層的3D圖形API,它通過減少驅動層的API調用CPU的消耗提高渲染效率。 |
12.Network | 用鏈接工具分析你的程序如何使用TCP/IP和UDP/IP鏈接。 |
13.OpenGL ES Analysis | 將OpenGL ES Analyzer and OpenGL ES Driver加入到模板中,這個模塊測量分析OpenGL ES活動正確性檢測以及表現問題,提供解決建議。 |
14.System Trace | 系統跟蹤,通過顯示當前被調度線程提供綜合的系統表現,顯示從用戶到系統的轉換代碼通過兩個系統調用或內存操作。 |
15.System Usage | 這個模板記錄關于文件讀寫,sockets,I/O系統活動, 輸入輸出。 |
16.Time Profile | 執行對系統的CPU上運行的進程低負載時間為基礎采樣。 |
17. Zombies | 測量一般的內存使用,專注于檢測過度釋放的野指針對象,也提供對象分配統計,以及主動分配的內存地址歷史。 |
其中常用的有以下幾種工具:
Allocations,Leaks,Zombies,Core Animation,Automation,Time Profiler,Cocoa Layout,Energy Diagnostics,Network
我上面的數據都是xcode8帶的,有細心的讀者會發現,以前的模板貌似功能更多些,其實都差不多只是合并了而已。
下面按照功能劃分,看一下這些工具是怎么使用的。
定位內存問題
- 內存不合理引用,檢測重復操作內存是否持續增長 Allocations
每次操作后,點擊mark generations button,會設置一個flag,然后查看每個迭代的詳細數據。 - 內存泄漏Leaks,內存泄漏使用Leaks檢測,如果對象發生內存泄漏,detail panel 中會看到對象的retain release歷史記錄,如果非對象發生內存泄漏,就會看到malloc和free的調用歷史。
- 野指針Zombies,Zombie問題,引用retaincount為0的對象,使用Debug模式,將環境變量NSZombieEnabled設為true。
檢測I/O活動
檢測iOS app如何使用TCP/IP和UDP/IP,與connections Instruments一起使用,檢測app發送和接收的包數目。
圖像性能檢測
- core animation graphics 用來檢測幀頻率
- OpenGL activity
- GPU Driver
** CPU使用**
- Performance Monitor Counters。
- 電量:Energry 跟蹤電量、CPU、網絡、顯示亮度、睡眠/喚醒、藍牙、wifi、GPS。可以全天開啟Energry Diagnostics Log模式,在開發手機設備中,(重啟或關機會丟失該數據),數據收集結束后,將log數據傳到PC上。
- 線程使用Multicore Trace Template,分析多核性能,線程狀態、調度隊列、塊使用情況。Multicore Trace Template包含Thread states和dispatch Instruments。
- Timer Profiler Trace Template檢測內核使用情況。
自動化測試
UI automation Automation instrument 工具允許你讓 iOS 應用的用戶界面測試自動化。自動化界面測試可以讓你:
- 省去關鍵人員和釋放其他工作資源
- 執行更多綜合測試
- 開發可重復的回歸測試
- 減少程序錯誤
- 提高開發周期,產品更新
??如果你不想讓 Instruments 在你新建一個文檔的時候詢問你使用那個模板,你可 以在 Instruments 的偏好設置里面勾選 Suppress template chooser 選項來禁止模板選擇。
后記
??這個工具用起來是真的爽,特別是在優化的時候,可以很好的解決你的疑問和困惑,今晚已經很晚了,未完,待續~~