iOS 方案之本(Essence of Workaround in iOS) 是我新写的一个专题。在很多大厂的各路优化方案中,只是告诉了我们为了达到目的怎么去做,但是并没有说这个方案的本质原因是什么。这个专栏就是为了格物致知,从原理层面来讲述方案背后的原理。
背景
在很多大厂对外公布的 iOS 提高编译速度的方案中都会有这一种优化方案:
将 Build Setting 的 Debug Information Format 中的 Debug 改成 DWARF。
方案出处:
HACKERNOON - Speed up Swift compile time[1]
AREK HOLKO - Speeding up Development Build Times With Conditional dSYM Generation[2]
等等。
溯源 DWARF
DWARF
全名是 Debugging with Attribute Record Formats ,是一种调试信息的存放格式。
DWARF 第一版发布于 1992 年,主要是为 UNIX 下的调试器提供必要的调试信息,例如内存地址对应的文件名以及代码行号等信息,通常用于源码级别调试使用。另外通过 DWARF,还能还原运行时的地址成为可读的源码符号(及行号)。
DWARF 调试信息简单的来说就是在机器码和对应的源代码之间建立一座桥梁,大大提高了调试程序的能力。
iOS 中引入 DWARF
这种调试信息格式,其实也是顺应历史的潮流,因为 DWARF
已经在类 UNIX 系统中逐步替换 stabs
(symbol table strings),成为一种主流的调试信息格式。使用 GCC 或者 LLVM 系列编译器都可以很方便的生成 DWARF 调试信息。
在 《DWARF详解》[3]这篇博客中,作者给出了一个 DWARF 的发展历史以及它的一些竞品,这里我引用一下:
DWARF 发展历史
DWARF 版本 | 发布时间 | 社区 |
---|---|---|
DWARF1 | 1992 | Unix SVR4, PLSIG, UnixInternational |
DWARF2 | 1993 | PLSIG |
DWARF3 | 2005 | Free Standards Group |
DWARF4 | 2010 | DWARF Debugging Format Committee |
DWARF5 | 2017 | DWARF Debugging Format Co |