开启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