Debugging 陷入编程困境时应遵循的技巧

Debugging 陷入编程困境时应遵循的技巧,debugging,Debugging,当我遇到问题时: 我在谷歌上搜索代码片段 我着眼于隔离问题,以便更好地向其他人解释,以便获得答案 您使用什么搜索技术来找到问题的解决方案 我开始在堆栈溢出中提问 为了更快地解决问题,您还采用了哪些其他技术或方法?还有: 谷歌 谷歌 谷歌 堆栈溢出 谷歌 谷歌 如果我有一本书,也许会有一本 说真的,我在20世纪80年代开始(爱好)编程,甚至到了90年代中期,你必须知道一些事情,并且拥有一个技术库。然后谷歌出现了,用谷歌搜索一些东西比查找(书签!)API文档要容易得多(谷歌“java str

当我遇到问题时:

  • 我在谷歌上搜索代码片段
  • 我着眼于隔离问题,以便更好地向其他人解释,以便获得答案
您使用什么搜索技术来找到问题的解决方案

我开始在堆栈溢出中提问

为了更快地解决问题,您还采用了哪些其他技术或方法?

还有:

  • 谷歌
  • 谷歌
  • 谷歌
  • 堆栈溢出
  • 谷歌
  • 谷歌
  • 如果我有一本书,也许会有一本
说真的,我在20世纪80年代开始(爱好)编程,甚至到了90年代中期,你必须知道一些事情,并且拥有一个技术库。然后谷歌出现了,用谷歌搜索一些东西比查找(书签!)API文档要容易得多(谷歌“java stringbuilder”比浏览要快得多),更不用说一本真正的书(电子版或纸质版)

你想解决的大多数问题以前都解决过。很多次

剩下的调试归结为分解,可能是单元测试(与分解相关)和验证您的假设

所谓“分解”,我的意思是,您的解决方案是以这样一种方式构建的,即小部分可以单独测试并易于理解。如果你有一个7000行的方法,你(可能)做错了什么

理解你所做的假设也是关键,这样你就可以验证它们。例如,当我开始使用PHP时,我编写了如下代码:

$fields = $_SESSION["fields"]; // $fields is an associative array
$fields["blah"] = "foo";
我挠头想弄明白它为什么不起作用(下次查询$\u会话时数组没有更新)。我来自Java背景,您可以这样做:

Map fields = (Map)httpSession.get("fields");
fields.put("blah", "foo");
这肯定会奏效。但是PHP会复制数组。工作解决方案是使用参考:

$fields =& $_SESSION["fields"]; // $fields is an associative array
$fields["blah"] = "foo";
或者简单地说:

$_SESSION["fields"]["blah"] = "foo";

关于调试和编写健壮代码,我要说的最后一件事是了解解决方案的边界。我的意思是,如果你正在实现一个链表,那么当链表为空时,边界条件将围绕着链表旋转。

多年来,我最好的朋友就是跳上我的自行车回家。这些年来,仅仅是远离键盘就解决了我的许多问题。

去做点别的吧。不,真的。我发现把问题放在脑后会有帮助。当我在做别的事情,或者看电视,或者吃饭的时候,我已经数不清有多少次我想到了一个很好的解决方案。你的大脑似乎还在后台处理这个问题


如果这不能解决你的问题,试着和别人谈谈。你会惊讶地发现,经常有人能为你的问题提供解决方案,而这些解决方案如此简单,以至于你无法想象。

如果问题一直持续到一天结束,我会尝试有意识地把问题锁起来,以便在睡觉前解决

我意识到这听起来有点离谱,但根据我的经验,我醒来时至少会有一种解决问题的替代方法,如果不是完整的解决方案的话。我们的想法不是强调它,而是积极地决定一夜之间解决它。这样你就可以安心睡觉了


我认为吃得好、有规律的锻炼和良好的睡眠是解决问题的重要因素。

别忘了

通常我会花几个小时左右的时间来尝试解决问题,尝试不同的方法,把问题写在纸上,做图表。如果这些都不起作用,我通常会使用以下选项

  • 在我的显示器上贴一张便条,然后继续做别的事情
  • 在接下来的几个小时里把这张便条看一眼,把这个问题留在我的脑海里
  • 谷歌为类似问题和使用的方法
  • 咨询同事或朋友
  • 在stackoverflow之类的论坛上提问
  • 放弃并设计解决问题的方法,或者设计一种解决问题的方法,以便在其他时间解决问题,并在所述解决方法的现场贴上待办事项

  • 通常,最好的办法是做一点编程以外的事情来清醒一下头脑。请参见示例-我是在与一个特别棘手的错误作斗争时这样做的,当我回到问题上来时,我在大约一分钟内解决了它。

    向同事解释这个问题,或者写下来描述它。这会让你从不同的角度以不同的方式思考。为了更准确地描述问题的背景,你会退后一步,从更高的层次来看待问题,你可能会发现你忽略了一些真正重要的东西


    有时,你甚至会在结束描述之前找到解释。

    通常我会在睡觉前尝试解决它。。有时我在纸上写下代码正在做什么,然后把它分成几部分;我试图知道程序在运行时变量是如何变化的。

    首先尝试解决一个小得多的问题,看看你是如何处理的。 一旦你这样做了,更大的问题就不会那么可怕了。

    去厕所。 你移动,你的大脑就会得到氧气。 你放松,所以你专注于其他事情


    为创新撒尿!:)

    问问自己:解决这个棘手的问题对你的工作真的很重要吗


    在你的应用程序中(或者不管是什么大问题),是否有一个类似但更简单的问题,你可以解决,以完成大致相同的事情。

    通常,我会拿笔和纸,尝试解决问题的细节。如果这没有帮助,谷歌。如果做不到这一点,我会暂时做些别的事情,或者在线询问。到目前为止,你一直在为我工作。

    你被卡住的事实可能是一种“代码气味”。表明他们的som设计或方法有问题