分而治之以找到代码错误

下面的方法使用分而治之在程序代码中定位错误(不要与git bisect混淆)。我使用了一次,它很有用。在git中有更好的方法吗?到处拖动主分支是好的形式吗?

像GIT一样划分和征服的东西

错误可能存在于代码的任何部分。具有所有分支的2级二分树看起来像这样:

* 452a8ff (4/4) i
| * 32d0498 (3/4) h
|/
* 86de3c2 (2/2) g
| * 3740f7e (2/4) f
| | * 4cf909d (1/4) e
| |/
| * e9dc3a4 (1/2) d
|/
* 832edd8 (1/1) c
* a4ca550 'b'
* eafd06c 'a' 

分数是分支名称。分支1/1包含整个代码。分支1/2包含前半部分,分支2/2包含后半部分。分支1 / 4、2 / 4、3 / 4和4/4包含四分之一。

每个分治阶段都有4个步骤:

  1. 如果需要,将HEAD + master分支移至上一个提交
  2. 消除一部分代码,进行编译和测试
  3. 提交,其中提交消息是“错误”或“ noError”
  4. 为当前提交创建一个新分支,其中分支名称是经过测试的派系

该方法使用git reset。警告:每次重置git之前,请确保使用指向该提交的分支来提交文件

例子

下面的示例使用分而治之在代码中查找错误。

提交并创建初始分支:

(already on branch to be debugged, reset not needed)
(edit,compile,test)
$ git commit -am "error: description of error we want to locate the source of"
$ git branch 1/1
$ git log --oneline --decorate --graph --all
* 832edd8 (HEAD, master, 1/1) error: description of error
* a4ca550 'b'
* eafd06c 'a'

错误在分支1/1中。测试分支1/1的第一部分:

(already on branch 1/1, reset not needed)
(edit,compile,test)
$ git commit -am "noError"
$ git branch 1/2
$ git log --oneline --decorate --graph --all
* e9dc3a4 (HEAD, master, 1/2) noError
* 832edd8 (1/1) error: description of error
* a4ca550 'b'
* eafd06c 'a' 

分支1/2中没有错误。测试分支1/1的其他部分:

$ git reset --hard 1/1
(edit,compile,test)
$ git commit -am "error"
$ git branch 2/2
$ git log --oneline --decorate --graph --all
* 86de3c2 (HEAD, master, 2/2) error
| * e9dc3a4 (1/2) noError
|/
* 832edd8 (1/1) error: description of error
* a4ca550 'b'
* eafd06c 'a'

分支2/2中有错误。测试分支2/2的第一部分:

(already on branch 2/2, reset not needed)
(edit,compile,test)
$ git commit -am "noError"
$ git branch 3/4
$ git log --oneline --decorate --graph --all
* 32d0498 (HEAD, master, 3/4) noError
* 86de3c2 (2/2) error
| * e9dc3a4 (1/2) noError
|/
* 832edd8 (1/1) error: description of error
* a4ca550 'b'
* eafd06c 'a' 

分支3/4中没有错误。测试分支2/2的其他部分:

$ git reset --hard 2/2
(edit,compile,test)
$ git commit -am "errorFound"
$ git branch 4/4
$ git log --oneline --decorate --graph --all
* 452a8ff (HEAD, master, 4/4) errorFound
| * 32d0498 (3/4) noError
|/
* 86de3c2 (2/2) error
| * e9dc3a4 (1/2) noError
|/
* 832edd8 (1/1) error: description of error
* a4ca550 'b'
* eafd06c 'a' 

在分支4/4中发现错误。

精简版

4步分治制:

reset & edit
commit & branch

例子:

1/1 error: description
1/2 noError
2/2 error
3/4 noError
4/4 errorFound

分数是分支名称。分支1/1包含整个代码。分支1/2包含前半部分,分支2/2包含后半部分。分支1 / 4、2 / 4、3 / 4和4/4包含四分之一。

拥有一半(或四分之一或...)的代码通常无助于查明错误,因为该错误可能取决于代码库的上下文(而不是数量)。含义:提交可以引入功能上依赖于其他提交的其他更改的更改。
简单地删除一半的代码可能会损害那些功能上的依赖关系,并且代码可能仅由于缺少所述依赖关系而无法工作。

git repo按提交而不是按文件集查找错误。
如上所述,使用提交时“分而治之”方法的正确工具是git bisect

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

全局未找到名称代码错误

来自分类Dev

如何从NSError代码中找到错误描述?

来自分类Dev

在此android代码中找到错误

来自分类Dev

Appcelerator Titanium:代码签名错误:未找到代码签名身份

来自分类Dev

xcodebuild代码签名错误:未找到匹配的代码签名身份:

来自分类Dev

无法在我的代码中找到错误,使用 GCC 出现错误

来自分类Dev

如何使用分而治之方法解决FindMaximumSubarray的重复发生错误?

来自分类Dev

如何找到SQL Server中引发的错误代码?

来自分类Dev

代码签名错误如何修复未找到的团队ID

来自分类Dev

无法在python中的素数代码中找到错误

来自分类Dev

未找到代码点火器404错误

来自分类Dev

运行iOS代码时未找到-lPods-错误的库

来自分类Dev

SQL代码错误`SQL语句结束后找到字符`

来自分类Dev

在哪里可以找到“ make”错误代码列表?

来自分类Dev

无法在python中的素数代码中找到错误

来自分类Dev

有人可以在我的代码中找到错误吗

来自分类Dev

代码签名错误如何修复未找到的团队ID

来自分类Dev

在哪里可以找到USB错误代码列表?

来自分类Dev

有人可以在我的代码中找到错误吗?

来自分类Dev

如何找到SQL Server中引发的错误代码?

来自分类Dev

在哪里可以找到ModelSim错误代码列表?

来自分类Dev

给出无法找到未定义长度的错误的代码

来自分类Dev

在O(nlogn)时间复杂度中找到总和为0的子数组(使用分而治之)?

来自分类Dev

分而治之递归

来自分类Dev

分而治之相乘

来自分类Dev

迭代分而治之

来自分类Dev

使用分而治之

来自分类Dev

分而治之-找到包含唯一元素的两个大小相等的数组之间的中位数?

来自分类Dev

在Cordova构建ios期间未找到团队ID的代码签名错误

Related 相关文章

  1. 1

    全局未找到名称代码错误

  2. 2

    如何从NSError代码中找到错误描述?

  3. 3

    在此android代码中找到错误

  4. 4

    Appcelerator Titanium:代码签名错误:未找到代码签名身份

  5. 5

    xcodebuild代码签名错误:未找到匹配的代码签名身份:

  6. 6

    无法在我的代码中找到错误,使用 GCC 出现错误

  7. 7

    如何使用分而治之方法解决FindMaximumSubarray的重复发生错误?

  8. 8

    如何找到SQL Server中引发的错误代码?

  9. 9

    代码签名错误如何修复未找到的团队ID

  10. 10

    无法在python中的素数代码中找到错误

  11. 11

    未找到代码点火器404错误

  12. 12

    运行iOS代码时未找到-lPods-错误的库

  13. 13

    SQL代码错误`SQL语句结束后找到字符`

  14. 14

    在哪里可以找到“ make”错误代码列表?

  15. 15

    无法在python中的素数代码中找到错误

  16. 16

    有人可以在我的代码中找到错误吗

  17. 17

    代码签名错误如何修复未找到的团队ID

  18. 18

    在哪里可以找到USB错误代码列表?

  19. 19

    有人可以在我的代码中找到错误吗?

  20. 20

    如何找到SQL Server中引发的错误代码?

  21. 21

    在哪里可以找到ModelSim错误代码列表?

  22. 22

    给出无法找到未定义长度的错误的代码

  23. 23

    在O(nlogn)时间复杂度中找到总和为0的子数组(使用分而治之)?

  24. 24

    分而治之递归

  25. 25

    分而治之相乘

  26. 26

    迭代分而治之

  27. 27

    使用分而治之

  28. 28

    分而治之-找到包含唯一元素的两个大小相等的数组之间的中位数?

  29. 29

    在Cordova构建ios期间未找到团队ID的代码签名错误

热门标签

归档