二分编译

背景:

在大型项目开发过程中,编译一次可能就需要半个小时甚至更久。

编译失败的时候主要是看报错信息,如果实在找不到报错信息,或者说真的就没有报错信息,而改动点比较多比较分散,如何手动定位出错代码呢?

 

1,修改点划分

我们把修改点按照合理的分类方式和适度的颗粒度,分割为若干修改点。

分割要求是,每个部分的修改都可以成功编译,比如修改了函数入参类型,同名的.c和.h文件就需要被划分到一起。

分割方式包括但不限于:按模块分、按文件分、按pick的commit点分、按函数分、按行分等等。

按pick的commit点分是我现在遇到的情况,我的修改代码是从另外一个分支的MR中pick过来的,有9个commit点,所以我可以分割为9份修改点。

 

2,排查编译

假如修改点一共是9个,那么我们把代码下载9份,然后同时编译这9份代码,如果编译资源足够多,在一次编译时间内,我们就能确定哪个或哪些编译点有问题。

 

3,时间复杂度和空间复杂度

所谓时间复杂度就是几次编译时间,而空间复杂度,指的是编译所占的资源空间,也就是一共编译的次数。

上述的排查编译,时间复杂度O(1),空间复杂度O(n)

 

4,二分编译

如果我们确定或者几乎确定,出错的修改点只有一份,那么我们下载一份代码,只合入一半的修改点,编译一次就知道出错是在哪一半的修改点。继续下去直到找到目标。

时间复杂度O(log n),空间复杂度O(log n)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值