调试器的块

时间:2009-05-27 11:58:31

标签: debugging

你是否遇到过一个只是出于想法并且不知道下一步该尝试什么的错误,你真的生气了?关于如何突破这种模式,是否有任何一般性的想法?

10 个答案:

答案 0 :(得分:11)

当我被这样封锁时,我发现的最好建议就是离开一段时间。无论是长时间的午餐还是一天的假期。回来新鲜,焕然一新。大多数时候答案都会盯着你。到目前为止,10分钟的咖啡休息时间对我来说还不够,但您的里程可能会有所不同。

其次,与同行交谈。走过你尝试过的一切。只要求他们倾听,而且在你谈论它的过程中,很多时候,你会得到答案。

这些只是我调试阻止时经常使用的两个。

答案 1 :(得分:5)

  • 五分钟

非常关键,以免砸碎键盘。

  • 在给姐姐的电子邮件中解释问题

或者你两岁的儿子。 wouldn't understand a word *除非您非常清楚地解释它的人。您不需要发送电子邮件,只需要确定您是否了解它。你会惊讶于简单地重复这个问题多少次突然让你明白你哪里出错了。这是发现您对问题的假设以及它们可能不一定正确的一种好方法。

*这个链接是JaredPar在另一个SO问题上的优秀答案。

  • 与同事交谈

到目前为止,您已经“通过电子邮件发送”了家庭宠物,所以您知道您希望涵盖所有愚蠢的方面,是时候与真人交谈了。他们过去可能经历过一些模糊不清的事情,提醒他们注意这种情况,他们肯定会有不同的观点。尽量确保你清楚问题是什么,而不是你认为是什么。你不想偏袒他们。你可以而且应该谈论他们尝试过的东西,并解释为什么你认为问题出在那个领域(你可能是对的)但是你不想让他们对他们的建议大开眼界,即使他们没有似乎是对的。

  • 再次查看代码

到了这个时候,你应该希望减少暴力,你应该拥有新的想法。首先重新验证错误。这是一个简单的步骤,但我已经对我们的测试脚本中的错误感到沮丧,而不是在我们的代码中。一旦您再次验证了该错误,请从顶部开始。验证一切。在你最有信心的最后一点放一个断点,然后继续前进,直到你发现输出再次被打破。这是一个巨大的成功,因为你现在有一个希望更小的代码块来调查。然后,如有必要,请拉一位同事查看实际运行的代码。

答案 2 :(得分:3)

我通常会休息一下......如果这不起作用,我就会睡着了。 (实际上,老实说,我应该说我在这个问题上度过了一个不眠之夜。)

我几乎总是在早上准备一份可能的解决方案清单。 : - )

答案 3 :(得分:2)

我通常采取以下几个步骤:

  • 查看具有该错误的功能所涉及的代码,并以一种他们将帮助我缩小问题的方式放置记录器消息(这使您可以在以后不再那么恼火时查看记录器,也许可以找到有用的提示:P)
  • 向我的高级同事询问提示
  • 致电客户明确了解问题何时出现

答案 4 :(得分:1)

当我从一开始就没有采取结构性方法时,我通常会以这种心情结束。 通过迭代缩小问题可以存在的区域并尝试编写可以重现错误的最小代码库,我还没有失败。

答案 5 :(得分:0)

我认为如果遇到这种问题,是时候进行一些严肃的重构......

它也可能表明错误的假设。尝试以编程方式假设您正在“假设”的所有内容。看到它没有方法 - 不变量被打破堆栈中的任何方法。

答案 6 :(得分:0)

其他人提到休息或“睡觉”。这种技术被称为(其中包括)孵化。一旦你接受了这个想法,你也可以更进一步。

真正解决问题的一个重要方面,确信您以后会得到答案。否则,特别是如果睡在它上面的危险就是你会在最后一刻担心它,然后这会变成一个无休止的循环,让你的头脑在一夜之间被抓住。你可能最终醒来并没有太好休息,梦想着许多循环梦想。这样做太多了,这是一条沮丧的道路。

答案 7 :(得分:0)

另一个好的选择是将想法从其他开发者/团队成员那里反弹出来。有时他们会问你没有考虑过的问题。

如果您独自工作,最好让一些可以与之聊天的开发人员通过一些不同的方法进行故障排除。你会惊讶地发现,新的视角往往是你所需要的突破。

答案 8 :(得分:0)

尝试David Ungars“淋浴方法”:

“如果您知道要输入的内容,请键入。如果您不知道要输入什么内容,请淋浴并保持淋浴,直到您知道要输入的内容”

这种召唤大多数人喜欢做的事情。休息一下 !无论什么样的突破都没关系,只要你没有想到你在休息之前做的事情。任何形式的分心都是好的。

干杯!

答案 9 :(得分:0)

我通常会逐步完成有问题的方法/功能。并且不要认为错误来自那里,它可能来自它之前的任何地方。

使用正确的调试器,不要使用一系列printfs。