有没有调试模式?

pen*_*ake 29 debugging

我知道有很多流行且有用的设计专家.

调试方案有类似的东西吗?也许不是模式,而是分类的方法,可以针对类似情况重复使用.

Bro*_*oam 11

我将添加一个看起来相当明显的调试模式,但尚未说明:

将错误减少到可能的最小情况,然后将其用作任何建议修复的单元测试.


Chr*_*and 8

以下是一些适合我的方法:

  • 远离问题.类似于"获得更多的睡眠",有时候摆脱问题并专注于完全不同的事情(例如,解决问题)有助于在您恢复问题的工作时提供清晰度.
  • 向我的妻子解释问题.嗯,它不一定是我的妻子,而是一个不熟悉问题,系统或任何东西的人.这将迫使你必须在表面上进行假设,解释系统是如何工作的,甚至可以回到代码来验证你在说什么.在这种交流之后,我经常取得重大突破.


Mos*_*evi 7

我同意其他人关于单元测试作为防止错误的"模式".另外,我想引用调试中的以下步骤:找到最难以捉摸的软件和硬件问题的9个不可或缺的规则:

  • 了解系统
  • 让它失败
  • 放弃思考,看看
  • 分而治之
  • 一次改变一件事
  • 保持审计跟踪
  • 检查插头
  • 获得全新的视角
  • 如果你没有解决它,它不是固定的

最后,在更实际的方面,Dimitry Vostokov在他的网站上收集了一些非常好的调试模式.


Bob*_*Bob 5

当我只是在黑暗调试中拍摄时,我采用二分搜索方法.我将我的一半代码或一半方法注释掉,沿着这些方向,然后我专注于未注释的一半.如果问题仍然存在,我会评论另一半.等等.

  • 当源修改不是一个选项时,我不知道什么时候我会"调试".如果我没有源代码,我无法调试它,虽然我可以生成一个很好的错误报告. (4认同)

GSt*_*Sto 5

我的方法是使用科学方法:

  1. 收集有关正在发生的事情的数据,尝试很多不同的输入,看看我得到了什么输出
  2. 对正在发生的事情提出一个假设
  3. 测试说假设,我不对,然后回到第1步并重复.


ski*_*ppy 5

如果您有一段曾经工作的代码,现在出现错误和完整版本历史记录,那么通过历史记录进行二进制搜索会非常有用.您在工作提交和非工作提交之间选择一个点,然后编译并测试.如果该提交显示错误,你知道它是从这里或更早开始的,所以你回到这里和已知的良好提交中间并再次测试; 否则,你知道错误是在以后开始的,所以你要在这里和已知的错误提交之间中途前进,并在那里进行测试.你继续关注这个过程,直到你发现哪个提交引入了bug,然后你看看发生了什么变化,这个问题很有可能是显而易见的.

git bisect是一个用于此目的的壮观工具.但理论上你可以用一堆tarball做同样的事情,如果这就是你所拥有的.

当然,如果bug多次进出树,这将不起作用.如果您的提交不是非常精细,那么它可能不会非常有用.