开启log

- 在
log_and_fill_cache,函数里,我们看到了objcMsgLogEnabled这个变量,显然都objcMsgLogEnabled = true时,系统可以打印msgSend的日志 - 我们找到其赋值的地方

- 显然我们调用
instrumentObjectMessageSends方法可以对其进行赋值

- 日志存储的位置
/tmp/msgSends-%d
使用
- 当前只在
mac程序中使用, 模拟器还没找到解决方法 - 声明
extern void instrumentObjcMessageSends(BOOL flag);
extern void instrumentObjcMessageSends(BOOL flag);
int main(int argc, const char * argv[]) {
@autoreleasepool {
instrumentObjcMessageSends(YES);
WLWPerson *person = [WLWPerson alloc];
[WLWPerson say666];
instrumentObjcMessageSends(NO);
NSLog(@"Hello, World!");
}
return 0;
}
复制代码
- 然后在系统的
tmp目录下

- 可以看到对应的log日志

- 可以看到整个
objc_msgSend流程 - resolveClassMethod -> resolveInstanceMethod -> forwardingTargetForSelector->methodSignatureForSelector -> resolveInstanceMethod -> doesNotRecognizeSelector
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
























![[桜井宁宁]COS和泉纱雾超可爱写真福利集-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/4d3cf227a85d7e79f5d6b4efb6bde3e8.jpg)

![[桜井宁宁] 爆乳奶牛少女cos写真-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/d40483e126fcf567894e89c65eaca655.jpg)