二分法定位bug

背景:

在使用llvm libtooling库解析cpp代码的时候,会出现字符串解析为invalid的情况,初步排查是编译数据库command命令的影响,command有很多个编译选项,要确定哪个编译选项影响的呢?这时候就可以用到二分法定位

什么是二分法定位bug?

二分查找算法大家都知道,二分法定位也是同样的解决思路,每次把问题缩小到一半,这样定位的次数就是log2n的次数,大大减少了定位的次数,节省了时间。

  1. 确定范围:首先确定程序中可能存在问题的代码段或模块。

  2. 二分划分:将可能存在问题的代码段分成两部分,尝试分别运行这两部分代码。

  3. 观察结果:运行第一部分代码,观察程序是否出现错误。如果错误出现,说明问题可能在这一部分;如果没有错误,问题可能在第二部分。

  4. 缩小范围:根据上一步的观察结果,将问题范围缩小到前半部分或后半部分。

  5. 重复二分:在确定问题所在的大致范围后,继续将这一部分再次二分,并重复步骤3和4。

  6. 细化定位:逐步缩小问题范围,直到能够精确定位到具体的函数调用、代码行或条件判断。

举个例子

背景说明了遇到的问题,以下这些是编译选项

-std=c++14
-Wall
-Wextra
-Werror
-O0
-O1
-O2
-O3
-Os
-g
-D
-U
-I
-L
-l
-pthread
-fPIC
-fpic
-fopenmp
-fexceptions
-nostdinc
-static

我们第一次定位问题,就把上面的编译选项缩减到一半,如下

-std=c++14
-Wall
-Wextra
-Werror
-O0
-O1
-O2
-O3
-Os
-g
-D

如果解析的字符串依然是invalid,那么说明问题出现在留下来的编译选项里,继续留一半,如此下去,就可以确定哪个编译选项影响了。

结论:

用二分法定位bug,一般是只有单个因素影响的,如果是多个因素,就需要逐个排查配合二分法使用了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值