首先,dSYM是什么鬼?
程序編譯后都會生成一個 dSYM 文件。
程序在執(zhí)行中通過地址來調用方法函數(shù)。而 dSYM 文件里存儲了函數(shù)地址映射,這樣調用棧里的地址可以通過 dSYM 這個映射表能夠獲得具體函數(shù)的位置。一般都會用來處理 crash 時獲取到的調用棧 .crash 文件將其符號化。

屏幕快照 2019-07-10 下午4.23.58.png
其次,說到Time Profiler。(要用release版本來profile)
時間分析工具,用來檢測應用CPU的使用情況,可以看到應用程序各個方法消耗的CPU時間。
官方文檔:https://help.apple.com/instruments/mac/current/#/dev03a7149d
-
time profile 是使用采樣的方法來統(tǒng)計,而不是記錄每一個方法調用的起始和結束,采樣間隔是 1 ms。
image.png
上圖中,main函數(shù)被采樣 5 次, method3 沒有被采樣,但是確實執(zhí)行了。
不能區(qū)分長時間運行的任務和重復執(zhí)行的任務。
關注點是 CPU,而且不會記錄所有操作。比如 method3 沒有被采樣。 -
查看time profiler結果
time profiler.jpeg
-
weight 調用自身和子類花費的時間及占總時間的百分比
不是實際耗費時間,而是該方法被采樣的次數(shù)乘以采樣間隔; -
self weight 自身花費的時間
該函數(shù)沒有調用其他函數(shù)時,被采樣的次數(shù)乘以采樣間隔; - 如果weight = self weight,則說明該函數(shù)沒有調用其它函數(shù);
- Symbol name 被調用的函數(shù)名

image.png

image.png

