基于汇编实现 hook objc_msgSend,统计方法耗时的方案

文章目录


简介

首先,iOS 中进行 hook 的方案有多种,这里使用的是 Facebook 的 fishhook 库:Github:fishhook

hook objc_msgsend ,货拉拉技术团队已有完善的方案:基于汇编实现objc_msgSend hook方法耗时的方案

另外,它们还开源了基于fishhook、汇编 hook objc_msgsend 并支持方法耗时可视化的项目:hll-wp-guldan-ios

接入

首先在 Podfile 中添加:

cpp 复制代码
pod 'Guldan', :git => "https://github.com/HuolalaTech/hll-wp-guldan-ios.git"

然后设置要监控的代码片段:

objectivec 复制代码
[GDNOCMethodTimeProfiler start];
// 下载图片
[self downloadImages];
[GDNOCMethodTimeProfiler stop];
[GDNOCMethodTimeProfiler handleRecordsWithComplete:^(NSArray<NSString *> * _Nonnull filePaths) {
       // file path
       for (NSString *filePath in filePaths) {
             NSLog(@"File path: %@", filePath);
         }
   }];

从控制台拿到 path:

最后将 path 的文件拖入 chrome://tracing/ :

经测试,模拟器(arm64)和真机均支持,不支持模拟器(x86_64)。

相关推荐
YF021111 小时前
Flutter 编译卡顿解决方案
android·flutter·ios
空中海12 小时前
第十一章:iOS性能优化、测试与发布
ios·性能优化
iAnMccc13 小时前
Swift Codable 的 5 个生产环境陷阱,以及如何优雅地解决它们
ios
visual_zhang13 小时前
Swift 方法派发机制深度解析 —— 兼与 Objective-C `objc_msgSend` 对比
objective-c·swift
iAnMccc13 小时前
从 HandyJSON 迁移到 SmartCodable:我们团队的实践
ios
kerli14 小时前
基于 kmp/cmp 的跨平台图片加载方案 - 适配 Android View/Compose/ios
android·前端·ios
北漂Zachary15 小时前
四大编程语言终极对决:汇编/C#/Go/Java谁更强
汇编·golang·c#
懋学的前端攻城狮16 小时前
第三方SDK集成沉思录:在便捷与可控间寻找平衡
ios·前端框架
用户794572239541319 小时前
【SwiftyJSON】拯救你的 as? [String: Any]——链式 JSON 访问的正确姿势
swiftui·objective-c·swift
冰凌时空19 小时前
Swift vs Objective-C:语言设计哲学的全面对比
ios·openai