以下是一些适合我的方法:
我同意其他人关于单元测试作为防止错误的"模式".另外,我想引用调试中的以下步骤:找到最难以捉摸的软件和硬件问题的9个不可或缺的规则:
最后,在更实际的方面,Dimitry Vostokov在他的书和网站上收集了一些非常好的调试模式.
当我只是在黑暗调试中拍摄时,我采用二分搜索方法.我将我的一半代码或一半方法注释掉,沿着这些方向,然后我专注于未注释的一半.如果问题仍然存在,我会评论另一半.等等.
如果您有一段曾经工作的代码,现在出现错误和完整版本历史记录,那么通过历史记录进行二进制搜索会非常有用.您在工作提交和非工作提交之间选择一个点,然后编译并测试.如果该提交显示错误,你知道它是从这里或更早开始的,所以你回到这里和已知的良好提交中间并再次测试; 否则,你知道错误是在以后开始的,所以你要在这里和已知的错误提交之间中途前进,并在那里进行测试.你继续关注这个过程,直到你发现哪个提交引入了bug,然后你看看发生了什么变化,这个问题很有可能是显而易见的.
git bisect是一个用于此目的的壮观工具.但理论上你可以用一堆tarball做同样的事情,如果这就是你所拥有的.
当然,如果bug多次进出树,这将不起作用.如果您的提交不是非常精细,那么它可能不会非常有用.