为什么 Debug Information Format 改为 DWARF 可以提高编译速度?

iOS 方案之本(Essence of Workaround in iOS) 是我新写的一个专题。在很多大厂的各路优化方案中,只是告诉了我们为了达到目的怎么去做,但是并没有说这个方案的本质原因是什么。这个专栏就是为了格物致知,从原理层面来讲述方案背后的原理。

背景

在很多大厂对外公布的 iOS 提高编译速度的方案中都会有这一种优化方案:

将 Build Setting 的 Debug Information Format 中的 Debug 改成 DWARF。

方案出处:

  • iOS 微信编译速度优化分享

  • 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
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值