INSTRUMENTS調(diào)試工具的使用(六)

版本記錄

版本號 時間
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ù)~~~

狗狗
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末瓮恭,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子厘熟,更是在濱河造成了極大的恐慌屯蹦,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绳姨,死亡現(xiàn)場離奇詭異登澜,居然都是意外死亡,警方通過查閱死者的電腦和手機就缆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門帖渠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人竭宰,你說我怎么就攤上這事空郊》菡校” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵狞甚,是天一觀的道長锁摔。 經(jīng)常有香客問我,道長哼审,這世上最難降的妖魔是什么谐腰? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮涩盾,結(jié)果婚禮上十气,老公的妹妹穿的比我還像新娘。我一直安慰自己春霍,他們只是感情好砸西,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著址儒,像睡著了一般芹枷。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上莲趣,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天鸳慈,我揣著相機與錄音,去河邊找鬼喧伞。 笑死走芋,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的絮识。 我是一名探鬼主播绿聘,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼嗽上,長吁一口氣:“原來是場噩夢啊……” “哼次舌!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起兽愤,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤彼念,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后浅萧,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體逐沙,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年洼畅,在試婚紗的時候發(fā)現(xiàn)自己被綠了吩案。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡帝簇,死狀恐怖徘郭,靈堂內(nèi)的尸體忽然破棺而出靠益,到底是詐尸還是另有隱情,我是刑警寧澤残揉,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布胧后,位于F島的核電站,受9級特大地震影響抱环,放射性物質(zhì)發(fā)生泄漏壳快。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一镇草、第九天 我趴在偏房一處隱蔽的房頂上張望眶痰。 院中可真熱鬧,春花似錦梯啤、人聲如沸凛驮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽黔夭。三九已至,卻和暖如春羽嫡,著一層夾襖步出監(jiān)牢的瞬間本姥,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人剂买。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓爹脾,卻偏偏與公主長得像,于是被迫代替她去往敵國和親司恳。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容