INSTRUMENTS調試工具的使用(八)

版本記錄

版本號 時間
V1.0 2017.06.24

前言

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

這一篇就先說一下文件系統相關和垃圾回收相關

十九、File System Instruments[文件系統相關]

該部分的 instruments 工具分析文件系統的信息和活動,比如讀和寫操作,權限等。

I/O 活動(I/O Activity)

??I/O Activity instrument 工具記錄 I/O 事件:函數調用,比如在文件系統上面 的 read、write、open、close 等操作。你可以使用該 instrument 工具來啟動和樣本 分析單個運行在 iOS 設備上面的進程。盡管 I/O Activity instrument 工具 供了 一個調用樹的回溯跟蹤視圖,在 Mac OS X 上有類似 I/O Activity instrument 工具 的 fs_usage 實用工具。

??在詳細面板,你可以選擇以下的一個或多個類別,每個類別包含了一組探針 (probes)(BSD 函數)。

  • File Attributes(文件屬性)

    • getattrlist
    • setattrlist
    • listxattr
  • File Permissions(文件權限) chmod

  • fchmod

  • chown

  • fchown

  • access

  • Open and Close(打開和關閉文件)

  • open

  • fdopen

  • fopen

  • freopen

  • close

  • fclose

  • Other(其他)

    • lseek
    • fsync
    • dup
    • dup2
    • link
    • unlink
  • Read and Write(讀寫操作)

  • read

  • pread

  • readv

  • write

  • pwrite

  • writev

  • Shared Memory(共享內存)

    • shm_open
    • shm_unlink
  • Sockets(套接字)

    • recv
    • recvfrom
    • recvmsg
    • send
    • sendmsg
    • sendto
  • Stats(統計)

    • lstat
    • lstat64
    • stat
    • stat64
    • fstat
    • fstat64

I/O Activity instrument 工具捕獲以下信息:

  • Function(函數):被調用的函數的名稱。
  • Duration(時長):函數調用的時長。
  • In File(輸入文件):輸入文件描述符。
  • In Bytes(輸入字節):要求讀或寫的字節的數量。
  • Out File(輸出文件):輸出文件描述符。
  • Out Bytes(輸出字節):實際讀或寫的字節數量。
  • Thread ID(線程 ID):線程的標示符。
  • Stack Depth(棧深度):函數調用期間使用的棧幀的數量。
  • Error(錯誤):函數調用期間最近出現的錯誤。
  • Path(路徑):可執行文件執行操作的文件路徑。
  • Parameters(參數):函數調用的參數。對于特定函數的參數的描述,參閱相應API文檔。

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

  • Sample number(樣本數量)
  • Call duration(調用時長)
  • Input file descriptor(輸入文件 述符)
  • Input bytes(輸入字節)
  • Output file descriptor(輸出文件 述符)
  • Output bytes(輸出字節)
  • Thread ID(線程 ID)
  • Stack depth(棧深度)

??對于任何函數的調用,你可以打開該調用的對應擴展詳細面板來查看整個調用的回溯跟蹤信息。該 instrument 工具還在詳細面板提供了一個調用樹視圖。I/O Activity instrument 工具某些時候被用來配合其他 iOS instruments 工具使用。比如,你可以配合使用 I/O Activity instrument 工具和 OpenGL ES Driver instrument 工具來檢查紋理加載進程。

文件鎖(File Locks)

??File Locks instrument 工具記錄調用 flock 函數時咨詢文件鎖的操作。該 instrument 工具可以運行在單個進程或所有當前系統運行的進程上面。該 instrument 工具的實現使用了 DTrace,并可以導入 DTrace 腳本。

該 instrument 工具捕獲以下信息:

  • 函數名稱
  • 函數調用者(包括可執行文件名稱和棧跟蹤信息)
  • 鎖住的文件路徑
  • 操作類型,它是一個整形變量,有以下相應的值(包括這些值的組合):
    • 共享鎖
    • 獨占鎖
    • 不阻塞鎖
  • 解鎖

跟蹤面板可以被設置來顯示以下的數據:

  • 棧深度(Stack depth)
  • 線程 ID(Thread ID)
  • 時間戳(Timestamp)

文件屬性(File Attributes)

??File Attributes instrument 工具記錄文件系統中文件的所有者和訪問權限的改 變事件。該 instrument 工具可以運行在單個進程或所有當前系統運行的進程上面。 該 instrument 工具的實現使用了 DTrace,并可以導入DTrace 腳本。該 instrument工具關于每個函數調用的以下信息:

  • 通過chmod和fchmod函數修改的文件權限
  • 通過chown和fchown函數修改文件所有者和所在的組

對于每個函數調用,instrument 工具捕獲以下信息:

  • 函數的名稱
  • 函數的調用者(包括可執行文件的名稱和棧跟蹤信息)
  • 可執行文件操作的文件路徑
  • 被修改的文件的文件 述符
  • 模式標志,它指示了可以在文件上面應用的權限(該值只在調用fchmod的chomod時才被捕獲)
  • 文件的新的所有者的用戶ID(該值只在調用fchown的chown時才被捕獲)
  • 文件的新組的組ID(該值只在調用fchown的chown時才被捕獲)

跟蹤面板可以被設置來顯示以下的信息:

  • 棧深度(Stack depth)
  • 線程 ID(Thread ID)
  • 文件 述符(File descriptor)
  • 模式(Mode)
  • 用戶 ID(User ID)
  • 組 ID(Gopup ID)

文件活動(File Activity)

??File Activity instrument 工具可以讓你監聽文件的訪問。該 instrument 工具 可以運行在單個進程或系統所有當前運行的進程之上。該 instrument 的實現使用了 DTrace,并可以導入 DTrace 腳本。該 instrument 工具捕獲以下函數的調用信息:

  • 打開和新建一個可以讀取或寫入的文件(open)。
  • 刪除從每個進程的引用表的 述符(close)
  • 獲取關于一個文件的信息(fstat)

對于每個函數的調用,該 instrument 捕獲以下的信息:

  • 函數的名稱
  • 函數的調用者(包括可執行文件的名稱和棧跟蹤信息)
  • 可執行文件操作的文件路徑
  • 文件的文件描述符

跟蹤面板可以被設置來顯示以下的數據:

  • 棧深度(Stack depth)
  • 線程 ID(Thread ID)
  • 文件描述符(File descriptor)

目錄I/O(Directory I/O)

??Directory I/O instrument 工具記錄目錄的相關操作,比如移動目錄,創建符合連接等等。該 instrument 工具可以運行在單個進程或所有當前系統運行的進程之上。 該 instrument 工具的實現使用了 DTrace,并可以導入 DTrace 腳本。

該 instrument 工具捕獲以下函數的調用信息:

  • delete - 刪除一個文件和目錄
  • link - 創建一個硬連接或符合連接
  • mkdir - 創建一個目錄
  • mount - 掛載一個文件系統
  • rename - 修改一個文件或目錄的名稱
  • rmdir - 移除一個目錄
  • symlink - 新建一個符合連接
  • unlink - 移除一個連接
  • unmount - 卸載一個文件系統

對于每個函數的調用,該 instrument 捕獲以下的信息:

  • 函數的名稱
  • 函數的調用者(包括可執行文件的名稱和棧跟蹤信息)
  • 可執行文件操作的文件或目錄的路徑
  • 新文件或目錄的名稱(在適當情況下)

跟蹤面板可以被設置來顯示以下的數據:

  • 棧深度(Stack depth)
  • 線程 ID(Thread ID)

二十、Garbage Collection Instruments[垃圾回收相關]

??該部分的 instruments 收集由垃圾回收器回收內存的信息。為了使用這些 instruments 工具,程序必須是建立在垃圾回收器之上并啟用垃圾自動回收功能。關于編寫一個垃圾回收器的程序,參閱 Garbage Collection Programming Guide。

GC Total

??GC Total instrument 工具追蹤所有由垃圾回收器分配和釋放的對象或字節的總數量。該 instrument 工具可以運行在單個進程或所有當前系統運行的進程之上。該 instrument 工具的實現使用了 DTrace,并可以導入 DTrace 腳本。它記錄只啟用了垃 圾回收的進程的數據。

該 instrument 工具捕獲以下信息:

  • 對象初始化和回收函數(包括棧跟蹤信息)
  • 有垃圾回收器回收的對象的數量
  • 由垃圾回收器回收的全部字節的數量
  • 全部已分配且仍然使用中的自己數量
  • 全部已經回收和正在使用中的字節的數量

跟蹤面板可以被設置來顯示以下數據:

  • 棧深度(Stack depth)
  • 線程 ID(Thread ID)
  • 回收的對象(Objects reclaimed)
  • 回收的字節(Bytes reclaimed)
  • 正在使用的字節(Bytes in use)
  • 全部字節(Total bytes)

垃圾回收(Garbage Collection)

??Garbage Collection instrument 工具測量垃圾回收器清除階段的回收數據。該 instrument 工具可以運行在當個進程或所有當前系統運行的進程之上。該 instrument 工具的實現使用了 DTrace,并可以導入一個 DTrace 腳本,它只記錄啟動了垃圾回收的進程的數據。

該 instrument 工具捕獲以下信息:

  • 對象的初始化和回收函數(包括棧跟蹤信息)
  • 分配內存的區(zone)
  • 事件是否是分代的(1為YES,0為NO)
  • 由垃圾回收器回收的對象的數量
  • 由垃圾回收器回收的字節的數量
  • 清除時間的持續時間(以微秒為單位)

跟蹤面板可以被設置來顯示以下信息:

  • 棧深度(Stack depth)
  • 線程 ID(Thread ID)
  • 區(Zone)
  • 是否分代(Is generational)(分代回收器查找由非分代回收器錯過的不在使用 的比較舊的對象,但它需要運行更長的時間,所以不經常運行)
  • 回收的對象(Objects reclaimed)
  • 回收的字節(Bytes reclaimed)
  • 持續時間(Duration)

后記

未完,待續~~~

金色世界
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,572評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,071評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,409評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,569評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,360評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,895評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,979評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,123評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,643評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,559評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,742評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,250評論 5 356
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,981評論 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,363評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,622評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,354評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,707評論 2 370

推薦閱讀更多精彩內容