WBBlades3.0
● 项目名称:WBBlades3.0
● Github地址:https://github.com/wuba/WBBlades
● WBBlades是基于Mach-O文件解析的工具集,包括无用代码检测(支持OC和Swift)、包大小分析(支持单个静态库/动态库的包大小分析)、点对点崩溃解析(基于系统日志,支持有符号状态和无符号状态)。主要利用了__Text汇编代码分析、架构提取、符号表剥离、DYSM文件提取、崩溃文件(ips)解析等技术手段实现。
WBBlades3.0---专为提效而设计
版本特性
3.0版本在原来基于命令行运行上述工具的基础上,对工具集进行了全面的可视化实现,开箱即用,专为研发提效而设计。另外,在疑难崩溃解析上,针对一些不易复现、且通用工具无法收集的崩溃(被操作系统直接杀死App进程场景),提供了基于系统日志的点对点崩溃解析功能。
无用类检测工具
1.1 技术特点
支持检测一个.app或.ipa文件中的无用类(支持OC和Swift),支持对类的继承、动态调用、自身类调用等情景下的无用类检测,同时支持检测指定静态库中的无用类。
1.2 用法介绍
工具首页 -> 无用类检测
将.app或.ipa文件(如图1中标签1)拖入工具中(如图1中标签2),点击【开始检测】按钮(如图1中标签3),此时日志输出区将会输出当前分析的过程以及展示最终的无用类分析结果。(如图1中标签4)
图1:快速进行无用类检测示意图
如果想要在指定的静态库中分析无用类,则可以按下图2所示流程,将指定的静态库拖入到静态库输入框(图2中步骤2),同时点击添加按钮(图2中步骤3),添加后会在图2中标签4位置展示,此时点击开始检测(图2步骤5),分析完后在图2所示6的位置进行分析结果的展示;
支持指定多个静态库进行分析,重复图2中的步骤2和步骤3即可。
图2:指定静态库中分析无用类示意图
包大小检测工具
2.1 技术特点
支持快速检测一个静态库的链接后大小无需编译链接。举例说明:如果你想知道接入或更新一个SDK对会增加多少包大小,可以用使用包大小检测工具检测,而无需将SDK接入编译链接成功后进行测算。
2.2 用法介绍
工具首页 -> 包大小分析
将静态库或者静态库所在的文件夹(如图中标签1)拖入工具中(如图中标签2),点击开始(如图中标签3),可执行文件对应的大小(如图中标签4)以及图片等资源占用的大小(如图中标签5)会直接输出到文本框中;
结果分析后,点击打开(如图中标签6), 就会打开存储在桌面上的分析后的详细数据;
包大小分析工具示意图
2.3 注意事项
如果使用动态库, 动态库本身是独立的Mach-O结构, 用分析工具只相当于将架构剥离为arm64时对应的包大小。
崩溃日志解析工具
3.1 技术特点
支持多种系统崩溃日志(ips文件)的符号还原原始堆栈,便于定位问题。
可以通过符号表文件解析系统崩溃日志,解析时支持四种不同的文件:
-
未剥离符号表的可执行文件(.app文件,自动剥离符号表文件)
App最终生成的产物,是在Products中的进程名.app文件,通常在Debug过程中构建并生成的.app文件未剥离dSYM符号表文件,我们将自动提取该符号表文件并提取轻量符号表用于解析崩溃日志。 -
不包含符号表的可执行文件(.app文件,无符号解析)
若你的.app文件已经剥离过符号表文件,我们尝试通过无符号进行解析,场景仅适用于OC。 -
系统符号表文件(.dSYM文件,自动剥离轻量化符号表)
它包含文件,方法以及行数指令信息的文件,通常在Release环境中构建包时自动会通过DWARF将调试信息从可执行文件中剥离到dSYM文件。我们将从该文件中提取轻量符号表用于解析崩溃日志。 -
轻量化符号表(.symbol文件,通过该工具生成的符号表文件)
是我们自研的轻量符号表文件,文件中包含函数指令区间以及对应的函数名,如果你之前使用过该工具,可以直接将该符号表文件拖入用于解析崩溃日志。
支持iOS15+系统中App存在段迁移情况下,系统崩溃日志中异常符号的自动修正,包括进程名丢失,基地址丢失。
3.2 用法介绍
工具首页 -> 崩溃解析
将系统崩溃日志拖入到大文本框中(如图中标签1),并且将符号表文件(支持.app, .dSYM, .symbol文件)的路径拖入到文本框中(如图中标签2),点击开始即可;
结果分析后,点击打开(如图中标签6), 就会打开存储在桌面上的分析后的详细数据;
崩溃日志解析工具示意图
3.3 注意事项
需要确认系统崩溃日志以及符号表文件是否对应,否则解析结果会不正确。
静态库依赖关系工具
4.1 技术特点
支持多个静态库之间的依赖关系以及所依赖的符号。
4.2 用法介绍
工具首页 -> 静态库依赖关系
将静态库所在的路径拖入到文本框中(如图中标签1),点击开始即可输出结果;
结果分析后,点击打开, 就会打开存储在桌面上的分析后的详细数据;
静态库依赖关系工具示意图
欢迎贡献和交流
本文分享自微信公众号 - 58技术(architects_58)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。