iOS组件二进制源码调试热切换方案

现状现在工程中大量组件已经是二进制形式接入,二进制接入带来的好处是工程编译时间短,但是弊端也很明显,那就是调试麻烦,打成二进制的组件就是一个黑盒,工程遇到crash或者断点调试的时候就没法看到源码,当前工程支持二进制和源码两种接入方式,可以通过调整podfile中的组件源切换成源码接入,但是这样又得重新install安装源码,再重新编译工程,整个过程最快也得耗时数分钟,且偶发的crash还无法还原堆栈情况。那么在组件是二进制接入的情况下,能不能够实现在断点中断或者crash产生的时候快速关联映射到源码?答案是可以的!DWARFDWARF是一种调试信息格式,通常用于源码级别调试。能够为调试器提供必要的调试信息,例如PC地址对应的文件名及行号等信息。如果在打包静态库的时候,没有裁减掉调试信息,那么静态库Mach-O文件中存在一个__DWARF段,这个段就保存了相关调试信息,包含符号对应的源码文件位置等信息,在用lldb进行调试的时候,调试器就会更新__DWARF段的相关信息去查找源码,然后关联显示出来。可以使用系统自带的DWARF查看工具dwarfdump查看静态库的调试信息,可以看到如下
LLDB 2020年05月01日 4,084次浏览