[GIT] git bisect 的使用

git bisect 如何使用

详细信息查看git bisect帮助文档
$git bisect --help

举个小例子
怎么找出 第一个导致lit用例vector-compare-all_of.ll失败的提交

$git branch
*  main

我故意在HEAD~1处("bug zx1")写了个bug让某lit用例运行失败
$git log -n 5
commit a34a23e0c8dff5ed943dfecba350f373503e8984 (HEAD)  "zx2"
commit 4b6afdd2b31d6208237b9b2741929cc91cddcb4a "bug zx1"
commit 45fd93fdffd5e85e8d3b62099cc0ecb0053b3f40 "zx0"
commit 7ad728b4b7b9f740fc701c09e0c50afde258f357 "zx-1"
commit e3cd8fedcac31a037a38889abace9e0d0205c451 "zx-2"

开始bisect,HEAD("zx2")为bad提交,HEAD~4("zx-2")为好的提交
$git bisect start HEAD HEAD~4
Bisecting: 1 revision left to test after this (roughly 1 step)
[45fd93fdffd5e85e8d3b62099cc0ecb0053b3f40] "zx0" <- 此时将中间提交设为新HEAD

$git log -n 1
commit 45fd93fdffd5e85e8d3b62099cc0ecb0053b3f40 (HEAD) "zx0"

我们可以看到git bisect会切换到一个专门的branch上
$git branch
* (no branch, bisect started on git-bisect)
  main

执行run找出第一个开始使得 test 出错的提交
$git bisect run ../test_gb.sh
running ../test_gb.sh
Testing (LIT)... Passed
Bisecting: 0 revisions left to test after this (roughly 0 steps)
[4b6afdd2b31d6208237b9b2741929cc91cddcb4a] bug zx1
Testing (LIT)... Failed (code 1)
4b6afdd2b31d6208237b9b2741929cc91cddcb4a is the first bad commit
commit 4b6afdd2b31d6208237b9b2741929cc91cddcb4a "bug zx1"
bisect run success

$git bisect reset
Previous HEAD position was 4b6afdd2b31d bug zx1
Switched to branch 'main'
执行完以后我们用reset回到原来的分支

我写的一个git bisect run …/test_gb.sh的测试脚本

$cat ../test_gb.sh
#!/bin/bash
#llvm-lit llvm/test/CodeGen/X86/vector-compare-all_of.ll
OLD_DIR=$( pwd )
LLVM_DIR="/export/users2/xiangzh1/LLVM/ORG/llvm-project"
LLVM_BUILD_DIR="$LLVM_DIR/../build-all"
LOGFILE="$LLVM_DIR/../gb.log"
LLVM_LIT="$LLVM_DIR/../build-all/bin/llvm-lit"

LIT_TEST_FILE="$LLVM_DIR/llvm/test/CodeGen/X86/vector-compare-all_of.ll"

function do_lit_test() {
  if [[ "$LIT_TEST_FILE" == "" ]]; then
    return 0
  fi

  printf "Testing (LIT)..." | tee -a "$LOGFILE"
  if [[ ! -f "$LIT_TEST_FILE" ]]; then
    printf " Passed (test not found).\n" | tee -a "$LOGFILE"
    return 0
  fi

  $LLVM_LIT -vv "$LIT_TEST_FILE" >> "$LOGFILE" 2>&1
  local TEST_STATUS=$?
  if [[ $TEST_STATUS != 0 ]]; then
    printf " Failed (code $TEST_STATUS)\n" | tee -a "$LOGFILE"
    return 2
  fi

  printf " Passed\n" | tee -a "$LOGFILE"
  return 0
}

cd $LLVM_BUILD_DIR

make -j20 &> ttdb; tail -n 20 ttdb

do_lit_test
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值