二分编译

举报
用户已注销 发表于 2021/11/19 03:09:50 2021/11/19
【摘要】 背景: 在大型项目开发过程中,编译一次可能就需要半个小时甚至更久。 编译失败的时候主要是看报错信息,如果实在找不到报错信息,或者说真的就没有报错信息,而改动点比较多比较分散,如何手动定位出错代码呢?   1,修改点划分 我们把修改点按照合理的分类方式和适度的颗粒度,分割为若干修改点。 分割要求是,每个部分的修改都可...

背景:

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

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

 

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)

文章来源: blog.csdn.net,作者:csuzhucong,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/nameofcsdn/article/details/106929827

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。