項目地址:AppTrace (github.com/chenzhengxu…)git
用來追蹤app運行期間全部調用的方法以及耗時時間,支持真機和模擬器,方便開發者對於app進行優化。如圖: github
經過 fishhook 鉤住 objc_msg_send
方法,在替代的方法中實現參數寄存器值的保存與恢復,從而在原始的 objc_msg_send
方法先後調用自定義方法,又不影響自己函數的調用,在 arm64
下的大體邏輯是:chrome
保存寄存器x0 - x8,q0 - q7到棧上,
記錄class,selector,startTime,lr
恢復寄存器x0 - x8,q0 - q7,
調用原始objc_msg_send,
保存寄存器x0 - x8,q0 - q7到棧上,
記錄endTime,
恢復寄存器x0 - x8,q0 - q7,以及lr
複製代碼
最終產物爲trace.json
,能夠直接經過chrome://tracing
展現結果。json
已支持 CocoaPods
引入ruby
pod 'AppTrace'
複製代碼
引入頭文件直接使用bash
#import "AppTrace.h"
// call it wherever you want, pefer to call in main.m like Example
[AppTrace startTrace];複製代碼