二级制源码调式工具

使用二进制,虽然会给工程带来构建速度的提升,但是会带来一个新的问题:在调试工程时,那些使用二进制的组件,无法像源码调试那样看到足够丰富的调试信息

利用 CocoaPods 的插件机制,为 CocoaPods 的 pod 命令增加了 xxsource 子命令,可以在使用二进制构建工程的同时,非常快速地将一个组件调出源码进行调试,具体的使用效果可以看一下如下的屏幕录制:

原理

DWARF是一种调试信息格式,通常用于源码级别调试。能够为调试器提供必要的调试信息,例如PC地址对应的文件名及行号等信息。如果在打包静态库的时候,没有裁减掉调试信息(Generate Debug Symbols = YES),那么静态库Mach-O文件中存在一个__DWARF段,这个段就保存了相关调试信息,包含符号对应的源码文件位置等信息,在用lldb进行调试的时候,调试器就会更新__DWARF段的相关信息去查找源码,然后关联显示出来。可以使用系统自带的DWARF查看工具dwarfdump查看静态库的调试信息,可以看到如下类似调试信息,包含符号对应的源文件地址,源文件中行数等详细信息:

 dwarfdump mapsdk_locreport 

DWARF 1.1.0 Reference文档

AT_name: AT_name属性,其值是一个以空字符结束的字符串,包含派生编译单元的主源文件的完整或相对路径名。

AT_comp_dir: 一个AT_comp_dir属性,它的值是一个以空字符结束的字符串,包含编译命令的当前工作目录,该编译命令以任何形式生成这个编译单元。

工程化

  1. 首先,我们需要确定使用的组件二进制的编译目是否相同的。这样就方便我们在本地某个路径下统一管理下载的源码文件。
  2. 接下来,我们通过 dwarfdump 这个命令获取源码文件应该在的路径,然后通过给 CocoaPods 增加命令,将源码文件下载并放置在对应的路径中。

二级制源码调式工具-升级

第一版在进行源码映射的时候 需要进行源码地址进行下载 步骤稍微繁琐

1.源码地址不好查找获取

2.源码地址在输入时候容易出错

优化

这里运用pod plugins 获取 映射库的版本,我们在进行对源码地址进行拼接达到我们想要下载地址

注意

第一次使用 在创建文件时 权限不够会失败

工具开发来源美团zsource

你可能感兴趣的:(二级制源码调式工具)