当前位置: 首页 > Web前端 > HTML

善用gitbisect帮你快速定位疑难bug

时间:2023-03-28 19:36:43 HTML

使用gitbisect二分法定位问题的基本步骤:gitbisectstart[最近错误的commitid][较远正确的commitid]测试相应的功能gitbisectgood标记正确直到出现问题,gitbisectbad提示的commitid就是引起问题的commit如下:?buildingclient+serverbundles...?renderingpages...builderror:ReferenceError:document未定义我可以确定可以成功构建最后一个版本(d577ce4)。gitbisect简介gitbisect命令使用二进制搜索算法来查找提交历史记录中的哪个提交引入了错误。几乎可以让你闭着眼睛快速定位到任何源码引起的问题,非常实用。您只需要告诉命令一个包含错误的错误提交ID和引入错误之前的一个好的提交ID,该命令将使用二分法在两个提交之间选择一个中间提交ID,并切换到该提交ID,然后问你这是一个好的commitID还是一个坏的commitID,你告诉它是好还是坏,然后它会不断缩小范围,直到找到引入bug的commitID。这样我们只需要对提交的代码进行一次分析,就可以快速定位并解决这个bug(具体定位时间取决于提交的代码量和你的经验),所以提交代码的时候一定要开发小批量的提交的习惯是每次只提交一个独立的小功能,这样一旦出现问题,很快就能定位到。接下来我将以VueDevUI之前出现的一个bug为例,详细介绍如何使用gitbisect这个强大的工具。定位过程:gitbisectstart5d14c34bd577ce4orgitbisectstartHEADd577ce4其中5d14c34b是最新提交的有bug的,d577ce4是上次release没有问题的提交。执行完bisect后,马上会切换到中间提交。以下是打印结果:kagol:vue-devuikagol$gitbisectstart5d14c34bd577ce4Bisecting:11revisionslefttotestafterthis(roughly4steps)[1cfafaaa58e03850e0c9ddc4246ae40d71]fi:read-tipiconstyleleak(#54)你可以看到以下提交已被删除:[1cfafaaa]修复:阅读提示图标样式泄漏(#54)执行命令:yarnbuild构建成功,因此标记为good:gitbisectgoodkagol:vue-devuikagol$gitbisectgoodBisecting:在此之后还有5个修订版需要测试(大约3个步骤)[c0c4cc1a25c5c6967b85100ee8ac636d90eff4b0]feat(drawer):添加服务模型(#27)标记为10000good,并立即通过二分法新提交:[c0c4cc1a]feat(drawer):添加servicemodel(#27)再次执行构建命令:yarnbuildbuildfailed,出现我们第一次遇到的错误:?buildingclient+serverbundles...?renderingpages...builderror:ReferenceError:documentisnotdefinedmarkbad,又切到中间的提交:kagol:vue-devuikagol$gitbisectbadBisecting:2次修改留待测试(大约2个步骤)[86634fd8efd2b808815835e7cb29ca40bc]壮举:在文档中添加scss预处理器&&修复:(Toast)sinToast中的glelifeModebug等等,不断验证,标记,验证,标记……最后会提醒我们是哪个提交导致了这个bug,提交者,提交时间,提交消息等信息KAGOL:VUE-DEVUIKAGOL$GITBISECTGOODC0C4CC1A25C5C5C6967B85100EEE8AC636D90EFF4B0是第一个糟糕的COSSCOMMITC0C4CC1A25C5C5C5C5C5C5C5C5C6967B85100EEEEEEEEEEEEEEE11227ang1222702730BRAINDnif330