iOS hook_msg_send记录全部调用方法

AppTrace

项目地址:AppTrace (github.com/chenzhengxu…)git

用途

用来追踪app运行期间全部调用的方法以及耗时时间,支持真机和模拟器,方便开发者对于app进行优化。如图: github

img

实现

经过 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];复制代码
相关文章
相关标签/搜索