版本記錄
版本號 | 時間 |
---|---|
V1.0 | 2017.06.23 |
前言
我們在做app的時候劫拗,不是做完功能就結(jié)束了疼蛾,很多時候是需要進行檢查和優(yōu)化的苗沧,而xcode自帶了一個很好的檢查工具,可以檢測內(nèi)存泄漏个曙。還可以查看哪一個方法比較耗時锈嫩。還可以檢測離屏渲染等等,隨后的幾篇我們就說一下這個工具的使用垦搬。感興趣的可以看這幾篇呼寸。
1.INSTRUMENTS調(diào)試工具的使用(一)
2.INSTRUMENTS調(diào)試工具的使用(二)
3.INSTRUMENTS調(diào)試工具的使用(三)
4.INSTRUMENTS調(diào)試工具的使用(四)
5.INSTRUMENTS調(diào)試工具的使用(五)
這一篇就先說一下DTrace數(shù)據(jù)使用和自定義instruments工具。
十三悼沿、使用DTrace數(shù)據(jù)
??你如果你跟蹤一個包含自定義 instruments 工具的文檔,你可以導(dǎo)出這些 instruments 工具底層的腳本骚灸,并使用 dtrace 命令行工具來運行它們糟趾。運行腳本后, 你可以重新導(dǎo)入結(jié)果數(shù)據(jù)進 Instruments 應(yīng)用里面甚牲。
??自定義 instruments 工具使用 DTrace 來實現(xiàn)义郑。DTrace 是最初由 Sun 創(chuàng)建和移植 到 Mac OS X v10.5 的一個動態(tài)追蹤工具。由于 DTrace 深入操作系統(tǒng)內(nèi)核丈钙,所以你可 以訪問內(nèi)核本身或你計算機上運行的進程的底層的操作非驮。許多內(nèi)置的 instruments 工具都是基于 DTrace 的。而且雖然 DTrace 本身就是一個非常強大和復(fù)雜的工具雏赦, Instruments 應(yīng)用給你訪問這個強大的 DTrace 工具 供了一個套簡單的接口劫笙,而無 需太復(fù)雜的操作。
??DTrace 并沒有移植到了 iOS 上面星岗,所以不能在運行在 iOS 設(shè)備上面的應(yīng)用創(chuàng)建自定義的 instrument 工具填大。
十四、關(guān)于自定義instruments工具
??自定義 instruments 工具使用 DTrace 探針(probe)俏橘。探針(probe)是一個就像是在你的代碼里面放置了一個傳感器允华。它響應(yīng) DTrace 可以綁定的位置和事件,比如函數(shù)的主入口寥掐。當函數(shù)執(zhí)行或事件產(chǎn)生的時候靴寂,相關(guān)的探針會被觸發(fā),且 DTrace 運 行任何和探針相關(guān)的動作召耘。大部分 DTrace 的動作只是簡單的收集關(guān)于操作系統(tǒng)的數(shù)據(jù)和用戶程序此刻的行為百炬。然而可以運行一個自定義腳本作為動作的一部分。腳本可 以讓你使用 DTrace 的特性來微調(diào)你收集的數(shù)據(jù)污它。
??每次遇到探針的時候它都會觸發(fā)收壕,但是和探針相關(guān)的動作不需要在探針每次觸發(fā) 的時候運行妓灌。斷言(predicate)是一個可以讓你限制探針動作何時運行的條件狀態(tài)。
一個 instruments 工具由以下幾部分構(gòu)成:
- 一個 述部分蜜宪,包含了instrument的名稱虫埂、類別和述。
- 一個或多個探針圃验,每個包含了和它相關(guān)的動作和斷言掉伏。
- 一個DATA聲明區(qū)域,你可以使用它來聲明所有探針共享的全局變量澳窑。
- 一個 BEGIN 腳本斧散,它初始化任何全局變量,并執(zhí)行任何 instrument 所需的啟動任務(wù)摊聋。
- 一個END腳本鸡捐,它執(zhí)行任何最后清理的動作。
??所有的 instruments 工具都應(yīng)該包含起碼一個探針和它相關(guān)的動作麻裁。類似的箍镜,所有的 instruments 工具都應(yīng)該包含一個合適的名稱和述來標識它們。
十五煎源、創(chuàng)建自定義的Instrument工具
??為了創(chuàng)建一個自定義的 DTrace 的 instrument 工具色迂,選擇 Instrument > Build New Instrument。
創(chuàng)建需要以下幾個過程:
- 添加和刪除探針
- 指定探針的提供者
- 給探針添加斷言
- 給探針添加動作
- 編寫自定義腳本的提示
- 編寫B(tài)EGIN和END腳本
- 從自定義腳本里面訪問內(nèi)核數(shù)據(jù)
- 因為 DTrace 腳本在系統(tǒng)的內(nèi)核執(zhí)行手销,它們可以訪問內(nèi)核的字符歇僧。如果你想要在 自定義 instruments 工具里面查看內(nèi)核全局變量和數(shù)據(jù)結(jié)構(gòu),你可以在你的 DTrace 腳本里面執(zhí)行這些操作锋拖。
- 變量作用域
- DTrace 腳本有一個基本扁平的結(jié)構(gòu)诈悍,因為缺乏流程控制語句,而且其設(shè)計為了保 證探針的執(zhí)行時間最小化兽埃。然而 DTrace 腳本里面的變量写隶,根據(jù)你的需求劃分到不同 的作用域。
- 查找腳本錯誤
- 如果你的自定義 instruments 工具的腳本代碼包含一個錯誤讲仰,當你使用 DTrace 邊緣該腳本的時候慕趴,Instruments 應(yīng)用會在跟蹤面板顯示該錯誤的信息。Instruments 應(yīng)用在你在你的跟蹤文檔里面按下 Record 按鈕但跟蹤又沒有真正開始的時候報告你 該錯誤鄙陡。在錯誤消息的氣泡里面包含了一個編輯按鈕冕房。單擊該按鈕來打開 instrument 工具的配置表,它此刻會標識探針的一個錯誤趁矾。
- 導(dǎo)出DTrace腳本
- 盡管 Instruments 應(yīng)用 供了很方便的接口來收集跟蹤數(shù)據(jù)耙册,但是很多時候直接 使用 DTrace 來收集數(shù)據(jù)會更加方便。
十六毫捣、內(nèi)置instruments工具
??Instruments 應(yīng)用里面內(nèi)置了許多 intruemtns 工具详拙。每個 instrument 工具都包 含它自己的配置選項和顯示信息的方式帝际,及收集合適的數(shù)據(jù)類型。內(nèi)置的 instruments 工具按照它收集的數(shù)據(jù)類型分組為少數(shù)幾個類別饶辙。以下個部分更詳細的 述了內(nèi)置 instruments 工具蹲诀。
Core Data Instruments[Core Data相關(guān)]
1. Core Data Saves
??Core Data Saves instrument 工具記錄了 Core Data 應(yīng)用中保存的操作。該 instrument 工具可以在單一進程或所有當前系統(tǒng)運行的進程中執(zhí)行操作弃揽。它只為這 些使用 Core Data 的進程記錄數(shù)據(jù)脯爪。該 instrument 工具在它的實現(xiàn)上使用了 DTrace, 并可以導(dǎo)入一個 DTrace 腳本矿微。
詳細面板的樣本數(shù)據(jù)
該 instrument 工具捕獲以下信息:
- Caller(調(diào)用者) 啟動保存操作的方法的名稱(包括棧跟蹤信息)痕慢。
- Save duration(保存耗時) 保存的耗時時間,以微秒為單位涌矢。
跟蹤面板的顯示項
跟蹤面板可以被設(shè)置來顯式以下任一信息數(shù)據(jù):
- Stack depth(棧深度) 棧調(diào)用的深度掖举。
- Thread ID(線程 ID) 線程標示符。
- Save duration(保存耗時) 保存操作的消耗時間娜庇。
2.Core Data Fetches
??Core Data Fetches instrument 工具記錄 Core Data 應(yīng)用中 取保存數(shù)據(jù)的操作塔次。 該 instrument 工具可以運行在單一進程或所有系統(tǒng)當前運行的進程之上。它只會記 錄使用 Core Data 的進程的數(shù)據(jù)思灌。該 instrument 工具在實現(xiàn)上使用了 DTrace俺叭,并可 以導(dǎo)入 DTrace 腳本恭取。
詳細面板的樣本數(shù)據(jù)
該 instruments 工具捕獲以下信息:
- Caller(調(diào)用者) 啟動提取操作的方法名(包括棧跟蹤信息)泰偿。
- Fetch entity( 提取的條目) 被提取的條目的名稱。
- Fetch count( 提取總數(shù)) 提取條目的總數(shù)蜈垮。
- Fetch duration( 取耗時) 提取操作消耗的時長耗跛,以微秒為單位。
跟蹤面板的顯式項
可以設(shè)置跟蹤面板來顯式以下任何的數(shù)據(jù):
- Stack depth(棧深度) 棧調(diào)用的深度攒发。
- Thread ID(線程 ID) 線程標示符调塌。
- Fetch count( 取總數(shù)) 提取條目的總數(shù)。
- Fetch duration(保存耗時) 提取操作的消耗時間惠猿。
擴展詳細面板的補充數(shù)據(jù)
對于詳細面板的條目羔砾,你可以打開它對于的擴展詳細面板來查看調(diào)用的棧信息和對應(yīng)事件發(fā)生的時間。
3. Core Data Faults
??Core Data Faults instrument 工具記錄 NSManagedObject 或它的一對多關(guān)系的 延遲初始化過程中發(fā)生的故障事件偶妖。該 instrument 工具可以運行在單一進程或所有系統(tǒng)當前運行的進程上面姜凄。它只收集使用了 Core Data 的進程的數(shù)據(jù)。該 instrument 工具的實現(xiàn)使用了 DTrace趾访,并可以導(dǎo)入 DTrace 腳本态秧。
詳細面板的樣本數(shù)據(jù)
該 instruments 工具捕獲以下信息:
- Caller(調(diào)用者) 觸發(fā)故障的操作的方法名(包括棧跟蹤信息)。
- Fault object(故障對象) 引發(fā)故障的對象的名稱扼鞋。
- Fault duration(故障耗時) 故障處理例程的執(zhí)行時長(以微秒為單位)申鱼。
- Relationship fault source(相關(guān)故障源)
- Relationship(相關(guān)關(guān)系) 關(guān)系名稱愤诱。
- Relationship fault duration(相關(guān)故障的耗時)
單位)。
跟蹤面板的顯式項
可以設(shè)置跟蹤面板來顯式以下任何的數(shù)據(jù):
- Stack depth(棧深度) 棧調(diào)用的深度捐友。
- Thread ID(線程 ID) 線程標示符淫半。
- Fault duration(故障耗時)
- Relationship fault duration(相關(guān)故障的耗時)
擴展詳細面板的補充數(shù)據(jù)
??對于詳細面板的條目,你可以打開它對于的擴展詳細面板來查看調(diào)用的棧信息和對應(yīng)事件發(fā)生的時間楚殿。
4. Core Data Cache Misses
??Core Data Cache Misses instrument 工具記錄高速緩存未命中導(dǎo)致的故障事件撮慨。 該 instrument 工具可以運行在單一進程或所有系統(tǒng)當前運行的進程上面。它只記錄 使用了 Core Data 的進程脆粥。該 intrument 工具的實現(xiàn)使用了 DTrace砌溺,并可以導(dǎo)入 DTrace 腳本。
注意:該 instrument 工具 供了 Core Data Fault instrument 工具 供的行為的一個子集变隔, 但是它對你分析整個應(yīng)用程序的性能更有幫助规伐。
** 詳細面板的樣本數(shù)據(jù)**
該 instruments 工具捕獲以下信息:
- Caller(調(diào)用者) 觸發(fā)高速緩存未命中的方法名(包括棧跟蹤信息)。
- Cache Miss(高速緩存未命中) 引發(fā)高速緩存未命中的對象的名稱匣缘。
- CM duration(高速緩存未命中的耗時) 故障處理例程執(zhí)行所用時長(以微為單位)猖闪。
- RCM source(相關(guān)高速緩存未命中源) 高速緩存未命中的相關(guān)源。
- RCM Relationship(相關(guān)高速緩存未命中關(guān)系) 關(guān)系名稱肌厨。
- RCM duration (相關(guān)高速緩存未命中耗時)培慌,相關(guān)高速緩存未命中的耗時(以微秒為單位)。
跟蹤面板的顯式項
可以設(shè)置跟蹤面板來顯式以下任何的數(shù)據(jù):
- Stack depth(棧深度) 棧調(diào)用的深度柑爸。
- Thread ID(線程 ID) 線程標示符吵护。
- CM duration(高速緩存未命中耗時) 如上。
- RCM duration(相關(guān)高速緩存未命中耗時) 如上表鳍。
**擴展詳細面板的補充數(shù)據(jù) **
??對于詳細面板的條目馅而,你可以打開它對于的擴展詳細面板來查看調(diào)用的棧信息和對應(yīng)事件發(fā)生的時間。
后記
未完譬圣,待續(xù)~~~