版本記錄
版本號 | 時間 |
---|---|
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)
后記
未完,待續~~~