`
csgood
  • 浏览: 7769 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

橡皮鸭程序调试法

阅读更多
下面,让我来为你介绍一个程序调试大法——“橡皮鸭程序调试法”,这个方法在调试界是很出众的,实施起来相当方便和简易,几乎可以随时随地地实验,几乎不需要借助任何的软件和硬件的支持,你甚至可以把你的程序打印出来,在纸面上进行调试。

那么,为什么这个方法要叫做橡皮鸭呢?因为橡皮鸭子是西方人在泡澡时最喜欢玩的一个小玩具,所以,这个东西应该家家户户都必备的。因为,这个方法由西方人发明,所以,就被取名为“橡皮鸭”了。

好了,话不多说,下面是整个调试方法的流程。

   1. 找一个橡皮鸭子。你可以去借,去偷,去抢,去买,自己制作……反正你要搞到一个橡皮鸭子。
   2. 把这个橡皮鸭子放在你跟前。标准做法是放在你的桌子上,电脑显示器边,或是键盘边,反正是你的跟前,面朝你。
   3. 然后,打开你的源代码。不管是电脑里的还是打印出来的。
   4. 对着那只橡皮鸭子,把你写下的所有代码,一行一行地,精心地,向这只橡皮鸭子解释清楚。记住,这是解释,你需要解释出你的想法,思路,观点。不然,那只能算是表述,而不是解释。
   5. 当你在向这只始终保持沉默的橡皮鸭子解释的过程中,你会发现你的想法,观点,或思路和实际的代码相偏离了,于是你也就找到了代码中的bug。
   6. 找到了BUG,一定要记得感谢一下那个橡皮鸭子哦。

什么?你觉得这个方法太“愚蠢”,太“弱智”了?是的,看上去,会这样做的人脑子好像是有点毛病。不过,我要告诉你的是,这个方法的确有效。因为,这就是“Code Review”的雏形!下面让我来给你解释一下。

    Once a problem is described in sufficient detail, its solution is obvious.

上面这句话的意思是

    一旦一个问题被充分地描述了他的细节,那么解决方法也是显而易见的。

我相信在座的各位都有过这样的经历,当你死活都找不到问题的原因的时候,当你寻求他人的帮助时,对别人解释整个你的想法和意图或是问题背景的时候,你自己都没有解释完,就已经找到问题的原因了。这样的经历,相信大家一定有过。这就是这个方法的意义所在。

所以,“橡皮鸭”只是一个形式,其主要目的是要你把自己写的代码做“自查”,也就是自己解释给自己听。当然,为了不让你像个“精神分裂”的程序员,引入“橡皮鸭”是很有必要的(虽然这样还是有点精神病,但比起精神分裂来说算是好的了,嘻嘻)。所以,真实的本质是Code Review。关于代码评审,大家可以看一下我的这篇文章《Code Review中的几个提示》,你会明白其中更多的东西的。

最后,我想和大家说一下道具“橡皮鸭”。是的,在我们的身边,你不一定能找得“橡皮鸭”,但你可以找到你你的同事,你的朋友,来做这个“橡皮鸭”,当然,他们并不一定有“橡皮鸭”好使,因为你的那些同事或朋友一定会在你解释的时候,随意地发表意见和看法,相当的令人annoying。《Code Review中的几个提示》和《结对编程的利与弊》也谈到了一些,供你借鉴。
分享到:
评论

相关推荐

    ducky:Chrome扩展程序可覆盖(超级可爱的)橡皮鸭,作为橡皮鸭调试期间的虚拟伴侣

    小鸭与您的在线数字橡皮鸭见面,以进行陪伴和调试-Ducky! :baby_chick: 镀Chrome扩展,覆盖了一只可爱的小橡皮鸭,作为橡皮鸭调试和一般开发工作中的数字伴侣。 为什么? 因为谁不想在他们的浏览器上放一只可爱的...

    droidbrute:经过统计优化的USB橡皮鸭式有效负载,可蛮力破解4位Android PIN码

    #Droidbrute Android PIN破解USB橡皮鸭式有效负载,通过统计生成的单词列表使之高效。 ##它的作用使用不安全的4位PIN设置破解Android设备上的密码。 该脚本是USB橡皮鸭有效载荷,可模拟键盘以输入统计上最常用的4位...

    橡皮鸭:每个程序员都需要一个橡皮鸭。 VBA和VB6 IDE(VBE)的COM加载项

    版权所有(C)2014-2019 Rubberduck项目贡献者该程序是免费软件:您可以根据自由软件基金会发布的GNU通用公共许可证的条款(许可证的版本3)或(可选)任何更高版本来重新分发和/或修改它。 分发该程序是希望它会...

    nchristiny.github.io:橡皮鸭,你就是那个

    在IT领域,"橡皮鸭调试法"是一种常见的编程问题解决技巧,通过向橡皮鸭解释代码来帮助程序员发现错误,因此这个标题也可能与编程和调试相关。 【描述】"christiny.github.io 橡皮鸭,你就是那个。" 这个描述非常...

    Duck-Decoder:为 hak5 USB 橡皮鸭解码注入.bin 文件的 Python 脚本

    鸭子解码器 介绍 不久前,我去另一个国家接受了一些课程,对我来说很幸运,我已经有了我的鸭子! 在我的旅行中,我经常发现自己靠近未锁定的计算机,我可以根据情况转储 lssas 或后门,为此我开始做一大堆不同的有效...

    rubbercraft:橡皮鸭马尔杜伊诺自动有效载荷发生器

    "橡皮鸭"通常指的是在编程中用来调试的实体,程序员通过向橡皮鸭解释代码问题来帮助自己理解问题所在,而在此情境下,它代表了该工具的辅助和调试性质。"马尔杜伊诺"可能源自意大利语,暗示着该工具具有创造性和艺术...

    opengl橡皮条程序

    opengl绘制橡皮条,所见即所得 是对四边形的绘制而非线段

    设计模式C++教程

    设计模式是软件工程中的一种最佳实践,它是在特定上下文中解决常见问题的模板,为软件设计提供了一种标准的解决方案。在C++编程语言中,理解并应用设计模式至关重要,因为它们可以帮助开发者创建可扩展、可维护且...

    橡皮筋程序c++ MFC vc6.0

    在压缩包的子文件“橡皮框的使用与修改”中,可能包含有源代码文件、资源文件、工程设置文件等,这些都对于理解橡皮筋效果的实现至关重要。源代码文件可能是cpp和h格式,cpp文件用于实现函数逻辑,h文件则包含了类和...

    Ask a question Rubber Duck-crx插件

    此扩展程序只是一件有趣的小事,可以提醒您橡皮鸭,您可以和它聊天,看到Chrome中的小图标会使您很可能退后一步,而橡皮鸭又可以拯救您花费大量时间并提高您的生产率。 橡皮鸭增加了代理权,我们在AE Studio喜欢的...

    AndroDucky:HID有效载荷创建工具,适用于android,无需nethunter,无需使用橡皮鸭

    安德鲁·达基(AndroDucky) HID有效载荷创建工具,适用于android,无需nethunter,无需使用橡皮鸭先决条件安卓PHP服务器Android的Stellar内核(注意因设备型号而异) HID键盘()如何使用非常简单,首先使用...

    Rubber_Ducky_Gather_Network_Info:一个非常快速的橡皮鸭脚本,它利用了 C 中的 gatherNetworkInfo.vbs 文件

    一个非常快速的橡皮鸭脚本,它利用了C:\Windows\System32 文件夹从受害者机器窃取不同的信息。 Gather_Network_Info_Script REM gathernetworkInfo JonnyBanana 的信息窃取脚本REM REM 延迟大,因为Windows 需要很...

    BypassUAC:用于 Hak5 USB 橡皮鸭的全功能 Windows UAC 旁路

    绕过UAC Hak5 USB 橡皮鸭的全功能 UAC 旁路,修复了当 UAC 窗口不显示时在有效负载开始时不需要的“y”。 根据您的需要自定义延迟。 降低的延迟值将加快有效负载的执行速度,执行不正确的风险很小。 增加延迟值将...

    rubberducky有效载荷

    "橡皮鸭式有效载荷"这一概念源于黑客和安全领域,它通常指的是一个能够执行特定功能或操作的代码片段,这些操作可能包括系统探测、数据收集或恶意活动。在IT安全中,有效载荷往往是攻击者利用漏洞入侵系统后部署的一...

    画橡皮线,可以连续画线

    在计算机图形学中,"画橡皮线"通常是指一种模拟橡皮擦功能的技术,它允许用户在屏幕上连续地绘制线条,擦除已有的图像或覆盖原有颜色。这个功能广泛应用于绘图软件、图像编辑器以及游戏开发等领域,提供给用户更加...

    VC++2005MFC橡皮筋画线程序

    橡皮筋画线程序,要求: 利用鼠标在视图上绘制线,能够设置线的颜色和宽度; 能够用鼠标拾取绘制的某条线,被选中的线能够高亮显示,并且弹出对话框,输入线的属性保存起来; 能够将绘制的线数据保存在Line....

    橡皮鸭「Rubberduck」-crx插件

    GitHub的代码审查助手 Rubberduck是GitHub和Bitbucket的侧边栏,可为您的代码审查带来更好的代码导航。 浏览代码页和拉取请求时,您可以*悬停以获取符号信息*查找符号的用法*打开符号的定义*使用文件树进行导航 ...

    VC++橡皮线画图程序设计代码

    1、橡皮筋画线程序,要求:  利用鼠标在视图上绘制线,能够设置线的颜色和宽度;  能够用鼠标拾取绘制的某条线,被选中的线能够高亮显示,并且弹出对话框,输入线的属性保存起来;  能够将绘制的线数据保存在...

    MFC橡皮条绘图单文档程序

    在本文中,我们将深入探讨如何使用Microsoft Foundation Class (MFC)库来创建一个橡皮条绘图的单文档应用程序。MFC是微软提供的一套C++类库,它简化了Windows应用程序的开发,特别是那些基于用户界面的应用。在这个...

    vc画橡皮线的源代码

    在VC++编程环境中,"vc画橡皮线的源代码"是一个典型的图形用户界面(GUI)应用开发示例,主要用于教初学者如何在Windows程序中绘制动态的、可擦除的线条,即“橡皮线”。这个例子的核心在于利用MFC(Microsoft ...

Global site tag (gtag.js) - Google Analytics