INSTRUMENTS調試工具的使用(六)

版本記錄

版本號 時間
V1.0 2017.06.23

前言

我們在做app的時候,不是做完功能就結束了,很多時候是需要進行檢查和優化的,而xcode自帶了一個很好的檢查工具,可以檢測內存泄漏。還可以查看哪一個方法比較耗時。還可以檢測離屏渲染等等,隨后的幾篇我們就說一下這個工具的使用。感興趣的可以看這幾篇。
1.INSTRUMENTS調試工具的使用(一)
2.INSTRUMENTS調試工具的使用(二)
3.INSTRUMENTS調試工具的使用(三)
4.INSTRUMENTS調試工具的使用(四)
5.INSTRUMENTS調試工具的使用(五)

這一篇就先說一下DTrace數據使用和自定義instruments工具

十三、使用DTrace數據

??你如果你跟蹤一個包含自定義 instruments 工具的文檔,你可以導出這些 instruments 工具底層的腳本,并使用 dtrace 命令行工具來運行它們。運行腳本后, 你可以重新導入結果數據進 Instruments 應用里面。

??自定義 instruments 工具使用 DTrace 來實現。DTrace 是最初由 Sun 創建和移植 到 Mac OS X v10.5 的一個動態追蹤工具。由于 DTrace 深入操作系統內核,所以你可 以訪問內核本身或你計算機上運行的進程的底層的操作。許多內置的 instruments 工具都是基于 DTrace 的。而且雖然 DTrace 本身就是一個非常強大和復雜的工具, Instruments 應用給你訪問這個強大的 DTrace 工具 供了一個套簡單的接口,而無 需太復雜的操作。

??DTrace 并沒有移植到了 iOS 上面,所以不能在運行在 iOS 設備上面的應用創建自定義的 instrument 工具。


十四、關于自定義instruments工具

??自定義 instruments 工具使用 DTrace 探針(probe)。探針(probe)是一個就像是在你的代碼里面放置了一個傳感器。它響應 DTrace 可以綁定的位置和事件,比如函數的主入口。當函數執行或事件產生的時候,相關的探針會被觸發,且 DTrace 運 行任何和探針相關的動作。大部分 DTrace 的動作只是簡單的收集關于操作系統的數據和用戶程序此刻的行為。然而可以運行一個自定義腳本作為動作的一部分。腳本可 以讓你使用 DTrace 的特性來微調你收集的數據。

??每次遇到探針的時候它都會觸發,但是和探針相關的動作不需要在探針每次觸發 的時候運行。斷言(predicate)是一個可以讓你限制探針動作何時運行的條件狀態。

一個 instruments 工具由以下幾部分構成:

  • 一個 述部分,包含了instrument的名稱、類別和述。
  • 一個或多個探針,每個包含了和它相關的動作和斷言。
  • 一個DATA聲明區域,你可以使用它來聲明所有探針共享的全局變量。
  • 一個 BEGIN 腳本,它初始化任何全局變量,并執行任何 instrument 所需的啟動任務。
  • 一個END腳本,它執行任何最后清理的動作。

??所有的 instruments 工具都應該包含起碼一個探針和它相關的動作。類似的,所有的 instruments 工具都應該包含一個合適的名稱和述來標識它們。


十五、創建自定義的Instrument工具

??為了創建一個自定義的 DTrace 的 instrument 工具,選擇 Instrument > Build New Instrument。

創建需要以下幾個過程:

  • 添加和刪除探針
  • 指定探針的提供者
  • 給探針添加斷言
  • 給探針添加動作
  • 編寫自定義腳本的提示
  • 編寫BEGIN和END腳本
  • 從自定義腳本里面訪問內核數據
    • 因為 DTrace 腳本在系統的內核執行,它們可以訪問內核的字符。如果你想要在 自定義 instruments 工具里面查看內核全局變量和數據結構,你可以在你的 DTrace 腳本里面執行這些操作。
  • 變量作用域
    • DTrace 腳本有一個基本扁平的結構,因為缺乏流程控制語句,而且其設計為了保 證探針的執行時間最小化。然而 DTrace 腳本里面的變量,根據你的需求劃分到不同 的作用域。
  • 查找腳本錯誤
    • 如果你的自定義 instruments 工具的腳本代碼包含一個錯誤,當你使用 DTrace 邊緣該腳本的時候,Instruments 應用會在跟蹤面板顯示該錯誤的信息。Instruments 應用在你在你的跟蹤文檔里面按下 Record 按鈕但跟蹤又沒有真正開始的時候報告你 該錯誤。在錯誤消息的氣泡里面包含了一個編輯按鈕。單擊該按鈕來打開 instrument 工具的配置表,它此刻會標識探針的一個錯誤。
  • 導出DTrace腳本
    • 盡管 Instruments 應用 供了很方便的接口來收集跟蹤數據,但是很多時候直接 使用 DTrace 來收集數據會更加方便。

十六、內置instruments工具

??Instruments 應用里面內置了許多 intruemtns 工具。每個 instrument 工具都包 含它自己的配置選項和顯示信息的方式,及收集合適的數據類型。內置的 instruments 工具按照它收集的數據類型分組為少數幾個類別。以下個部分更詳細的 述了內置 instruments 工具。

Core Data Instruments[Core Data相關]

1. Core Data Saves

??Core Data Saves instrument 工具記錄了 Core Data 應用中保存的操作。該 instrument 工具可以在單一進程或所有當前系統運行的進程中執行操作。它只為這 些使用 Core Data 的進程記錄數據。該 instrument 工具在它的實現上使用了 DTrace, 并可以導入一個 DTrace 腳本。

詳細面板的樣本數據
該 instrument 工具捕獲以下信息:

  • Caller(調用者) 啟動保存操作的方法的名稱(包括棧跟蹤信息)。
  • Save duration(保存耗時) 保存的耗時時間,以微秒為單位。

跟蹤面板的顯示項
跟蹤面板可以被設置來顯式以下任一信息數據:

  • Stack depth(棧深度) 棧調用的深度。
  • Thread ID(線程 ID) 線程標示符。
  • Save duration(保存耗時) 保存操作的消耗時間。

2.Core Data Fetches

??Core Data Fetches instrument 工具記錄 Core Data 應用中 取保存數據的操作。 該 instrument 工具可以運行在單一進程或所有系統當前運行的進程之上。它只會記 錄使用 Core Data 的進程的數據。該 instrument 工具在實現上使用了 DTrace,并可 以導入 DTrace 腳本。

詳細面板的樣本數據
該 instruments 工具捕獲以下信息:

  • Caller(調用者) 啟動提取操作的方法名(包括棧跟蹤信息)。
  • Fetch entity( 提取的條目) 被提取的條目的名稱。
  • Fetch count( 提取總數) 提取條目的總數。
  • Fetch duration( 取耗時) 提取操作消耗的時長,以微秒為單位。

跟蹤面板的顯式項
可以設置跟蹤面板來顯式以下任何的數據:

  • Stack depth(棧深度) 棧調用的深度。
  • Thread ID(線程 ID) 線程標示符。
  • Fetch count( 取總數) 提取條目的總數。
  • Fetch duration(保存耗時) 提取操作的消耗時間。

擴展詳細面板的補充數據
對于詳細面板的條目,你可以打開它對于的擴展詳細面板來查看調用的棧信息和對應事件發生的時間。

3. Core Data Faults

??Core Data Faults instrument 工具記錄 NSManagedObject 或它的一對多關系的 延遲初始化過程中發生的故障事件。該 instrument 工具可以運行在單一進程或所有系統當前運行的進程上面。它只收集使用了 Core Data 的進程的數據。該 instrument 工具的實現使用了 DTrace,并可以導入 DTrace 腳本。

詳細面板的樣本數據
該 instruments 工具捕獲以下信息:

  • Caller(調用者) 觸發故障的操作的方法名(包括棧跟蹤信息)。
  • Fault object(故障對象) 引發故障的對象的名稱。
  • Fault duration(故障耗時) 故障處理例程的執行時長(以微秒為單位)。
  • Relationship fault source(相關故障源)
  • Relationship(相關關系) 關系名稱。
  • Relationship fault duration(相關故障的耗時)
    單位)。

跟蹤面板的顯式項
可以設置跟蹤面板來顯式以下任何的數據:

  • Stack depth(棧深度) 棧調用的深度。
  • Thread ID(線程 ID) 線程標示符。
  • Fault duration(故障耗時)
  • Relationship fault duration(相關故障的耗時)

擴展詳細面板的補充數據
??對于詳細面板的條目,你可以打開它對于的擴展詳細面板來查看調用的棧信息和對應事件發生的時間。

4. Core Data Cache Misses

??Core Data Cache Misses instrument 工具記錄高速緩存未命中導致的故障事件。 該 instrument 工具可以運行在單一進程或所有系統當前運行的進程上面。它只記錄 使用了 Core Data 的進程。該 intrument 工具的實現使用了 DTrace,并可以導入 DTrace 腳本。

注意:該 instrument 工具 供了 Core Data Fault instrument 工具 供的行為的一個子集, 但是它對你分析整個應用程序的性能更有幫助。

** 詳細面板的樣本數據**
該 instruments 工具捕獲以下信息:

  • Caller(調用者) 觸發高速緩存未命中的方法名(包括棧跟蹤信息)。
  • Cache Miss(高速緩存未命中) 引發高速緩存未命中的對象的名稱。
  • CM duration(高速緩存未命中的耗時) 故障處理例程執行所用時長(以微為單位)。
  • RCM source(相關高速緩存未命中源) 高速緩存未命中的相關源。
  • RCM Relationship(相關高速緩存未命中關系) 關系名稱。
  • RCM duration (相關高速緩存未命中耗時),相關高速緩存未命中的耗時(以微秒為單位)。

跟蹤面板的顯式項
可以設置跟蹤面板來顯式以下任何的數據:

  • Stack depth(棧深度) 棧調用的深度。
  • Thread ID(線程 ID) 線程標示符。
  • CM duration(高速緩存未命中耗時) 如上。
  • RCM duration(相關高速緩存未命中耗時) 如上。

**擴展詳細面板的補充數據 **
??對于詳細面板的條目,你可以打開它對于的擴展詳細面板來查看調用的棧信息和對應事件發生的時間。

后記

未完,待續~~~

狗狗
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容