美文网首页iOS 开发每天分享优质文章ios 知识点iOS Developer
Messier - 简单易用的Objective-C方法跟踪工具

Messier - 简单易用的Objective-C方法跟踪工具

作者: iOS_小久 | 来源:发表于2019-06-07 11:45 被阅读35次

    Messier 可以用来跟踪iOS应用的Objective-C方法调用。在越狱设备上可以跟踪任意应用,在非越狱设备上也可用于跟踪调试中的应用。

    背景

    一般情况下使用Instruments(主要是Time Profiler)进行iOS 应用的性能分析就足够了,但是Time Profiler 把调用方法都合并了起来,失去了时序的表现。直到有一天看到Android开发的同事使用 systrace 分析性能,systrace生成一个html文件,把函数(方法)的调用耗时按照先后顺序表现出来。心里想:要是iOS也有这样的工具就好了。了解到这个html文件是 catapult 生成的。

    一天看到iosre论坛一篇hook objc_msgSend的帖子。突然想到,可以结合catapult来生成Objective C方法的性能分析图(暂且这么叫吧)。(虽然一直也有hook objc_msgSend的方法,但这次煮好的佳肴终于忍不住下手了)。

    于是经过一番努力,AppleTrace 于2017年9月份诞生了。在使用AppleTrace的过程中,我曾经写过四篇文章介绍他:

    小编推荐一个群 691040931 里面有许多的iOS开发者在交流技术分享自己的心得,更有一些资料不定期的分享更新。
    1. AppleTrace 性能分析工具
    2. AppleTrace 搭配 MonkeyDev Trace任意App
    3. 使用 Cydia 安装 AppleTrace Tweak
    4. 使用AppleTrace探索SpringBoard

    在使用AppleTrace的过程中,感受到AppleTrace还不够简单易用,尤其是:

    1. 不能在视觉感受上定义开始和结束点。例如点击某个按钮之前开始Trace,按钮点击完成后停止Trace。
    2. 获取trace文件太麻烦,需要手动从沙盒复制出来,然后执行merge.py,再执行trace2html(可选),最后打开trace文件。

    当工作只需要Trace某一个应用时,AppleTrace几乎满足了要求,然而当好奇心增强,想看越来越多的应用时,啰嗦的“手动”操作就有点麻烦了。

    Messier 诞生

    为了解决AppleTrace的易用性问题,我在AppleTrace的基础上开发了Messier应用(官方网站 https://messier.app/)。使用Messier可以方便的在越狱设备上Trace任意应用,且能更方便的在视觉上自定义Trace的开始点和结束点。

    Messier由三个部分组成。

    1. Tweak(越狱插件)
    2. Dylib(动态库 messier.framework)
    3. 桌面端(Messier.dmg)

    下面是相关截图:

    最新Build

    最新Build的文件在这里下载

    使用方法

    第一步,安装macOS客户端

    这里 下载安装最新的macOS客户端 Messier.dmg

    第二步,越狱设备配置

    (1)安装

    1. 打开 Cydia.
    2. 点击 Sources -> Edit -> Add.
    3. 输入 https://messier.app/cydia , 点击 Add Source. 重新加载后会看到 Messier Repo.
    4. 进入 Messier Repo, 安装Tweak Messier. (注意:Messier tweak 依赖 PreferenceLoaderAppList,所以需要先确保这两个Tweak已经安装)

    (2)配置

    打开系统的设置,向下滑动可以看见Messier(Developer下面),点击进入即可开始配置,如下图。

    Enabled Applications 打开后如下图,可设置需要Trace的应用。

    Trace On App Boot 配置是否在应用启动时就开始记录方法,默认启用。

    Inline Hook (HookZz) 是否使用Inline Hook,默认启用。Inline Hook使用了HookZz来完成。

    Main Thread Methods Only 是否只记录主现场的方法调用,默认关闭。

    Disable App Applications 是否关闭所有应用的方法记录,默认关闭。若启用后,Enabled Applications的配置将失效。

    第二步,非越狱设备配置

    非越狱使用,就是在由自己源码或者MonkeyDev的环境下进行,需要对Xcode工程配置。

    注意:首先要说明的是,目前Messier只支持arm64,因此只能使用arm64的真机

    这里 下载解压后得到messier.framework

    1. 拖拽 messier.frameworkXcode Targets -> Build Phases -> Link Binary With Libraries.
    2. 点击 New Copy Files Phase 添加 Copy Files 步骤, 拖拽 messier.framework 进去 ,配置 DestinationFrameworks.

    如下图配置:

    这种情况下如果需要进行一些参数配置,可以在 Project Scheme -> Run -> Arguments, 设置 Environment Variables

    MessierEnableOnAppBoot : true | false
    MessierInlineHook : true | false
    MessierMainThreadMethodsOnly : true | false
    
    
    例如:

    第三步,开始Trace

    打开macOS客户端,此时会提示等待连接,如下图:

    使用USB连接线连接iPhone和Mac电脑,打开配置好的要Trace的应用,运气好的话,应用不会Crash,并且macOS客户端会显示已经连接。(如果运气不好,应用Crash了,可以按照上文配置中的说明,关闭InlineHook)

    当Trace结束,点击Stop,然后点击Fetch,如果运气好的话,一番文件传输后,会使用Finder定位到trace.json文件,如下图:

    第四步,查看结果

    打开Chrome浏览器(或者Chromium系列),进入chrome://tracing

    把上一步产生的trace.json拖拽进去。

    奇妙的结果诞生了。


    此时,可以使用w a s d 来浏览这个文件了。详细使用方法可以点右上角的问好,如图:

    支持

    目前理论上支持 >= iOS10 的系统。

    我只是测试了iOS10和iOS12的少部分应用的Trace,如果遇到问题,大家随时反馈。

    开源和授权

    开源

    Messier是免费但闭源的。Messier的核心仍然是AppleTrace,因此核心仍然是开源的。除此之外,还要感谢以下三个仓库。


    到最后小编推荐一个群 691040931 里面有许多的iOS开发者在交流技术分享自己的心得,更有一些资料不定期的分享更新。
    资料截图

    转载自:https://everettjf.github.io/2019/05/06/messier/#背景

    相关文章

      网友评论

        本文标题:Messier - 简单易用的Objective-C方法跟踪工具

        本文链接:https://www.haomeiwen.com/subject/kjsmxctx.html