橡皮鸭式程序调试法

2023-12-06 03:38
文章标签 程序调试 橡皮 鸭式

本文主要是介绍橡皮鸭式程序调试法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

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

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

找一个橡皮鸭子。你可以去借,去偷,去抢,去买,自己制作……反正你要搞到一个橡皮鸭子。
把这个橡皮鸭子放在你跟前。标准做法是放在你的桌子上,电脑显示器边,或是键盘边,反正是你的跟前,面朝你。
然后,打开你的源代码。不管是电脑里的还是打印出来的。
对着那只橡皮鸭子,把你写下的所有代码,一行一行地,精心地,向这只橡皮鸭子解释清楚。记住,这是解释,你需要解释出你的想法,思路,观点。不然,那只能算是表述,而不是解释。
当你在向这只始终保持沉默的橡皮鸭子解释的过程中,你会发现你的想法,观点,或思路和实际的代码相偏离了,于是你也就找到了代码中的bug。
找到了BUG,一定要记得感谢一下那个橡皮鸭子哦。
什么?你觉得这个方法太“愚蠢”,太“弱智”了?是的,看上去,会这样做的人脑子好像是有点毛病。不过,我要告诉你的是,这个方法的确有效。因为,这就是“Code Review”的雏形!下面让我来给你解释一下。

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

上面这句话的意思是

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

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

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

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

(全文完)

原文地址:http://coolshell.cn/articles/1719.html

这篇关于橡皮鸭式程序调试法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/460281

相关文章

第五章 多重循环及程序调试 练习

1.使用双重循环输出九九乘法表 //九九乘法表public static void main(String[] args) {for (int i = 1;i <= 9;i++){for (int j = 1;j <= i;j++) {System.out.print(i + "*" + j + "=" + (i * j)+"\t");}System.out.println();}} 2.

MapReducer程序调试技巧(搭建伪分布式集群)

写过程序分布式代码的人都知道,分布式的程序是比较难以调试的,但是也不是不可以调试,对于Hadoop分布式集群来说,在其上面运行的是mapreduce程序,因此,有时候写好了mapreduce程序之后,执行结果发现跟自己想要的结果不一样,但是有没有报错,此时就很难发现问题,查找问题的方法之一就是对程序进行调试,跟踪代码的执行,找出问题的所在。那么对于Hadoop的Mapreduce是如何进行调试的

Linux上程序调试的基石(2)--GDB

3. GDB的实现  GDB是GNU发布的一个强大的程序调试工具,用以调试C/C++程序。可以使程序员在程序运行的时候观察程序在内存/寄存器中的使用情况。它的实现也是基于ptrace系统调用来完成的。  其原理是利用ptrace系统调用,在被调试程序和gdb之间建立跟踪关系。然后所有发送给被调试程序的信号(除SIGKILL)都会被gdb截 获,gdb根据截获的信号,查看被调试程序相应的内存地址,并

小程序调试技术详解(基于小猴小程序)

本篇文章主要围绕小猴小程序调试技术第三版进行展开。 在上一篇导读文章中提到,小猴小程序的调试部分从无到有一共经历了3个版本。本篇文章会详细描述面向开发者的调试功能是如何实现的。 文章将会描述以下部分: 调试实现的基本通信关系结构。如何实现完整的DOM审查能力。如何实现Console。如何实现Source以及断点调试。如何实现对网络记录的审查。如何实现基于页面的数据审查。 基本通信关系

小程序调试技术导读

近期团队内在自研小程序,我负责开发者工具中的调试部分。调试作为面向开发者的基础能力,扮演了极为重要的角色。 本篇文章是导读文章。 调试能力从0到1一共经历了4个版本,接下来的文章将会以这4个版本为主线分别进行介绍。 初始版 上图为调试还不存在时的一个通信关系图。 在彼时已经实现了逻辑代码与渲染代码的运行隔离,其中逻辑代码是运行在一个vm中的。 渲染层通过Electron提供的I

一个C++小程序调试过程记录

Top 20 C++ Projects With Source Code [2024 Update]https://www.interviewbit.com/blog/cpp-projects/ 这个网页有一些简单的C++程序的源码,闲来无事,把第一个程序(Bookshop Management System Using C++)的源码下载了下来。 源文件就只有一个.cpp文件,确实是简单,但

搭建Android系统C程序调试环境

在学习Android安全知识的过程需要在Android系统上验证一些C程序来验证安全漏洞或者学习操作系统知识,在这个过程有一个好的调试环境可以帮助我们更好的理解程序和Android系统的运行原理。本文描述了在Android系统上搭建调试环境的过程。 环境 ndk-build:编译软件。ubuntu 14.04:调试和编译平台。AOSP Prebuilt:AOSP仓库包含预编译好的工具链,用里面

程序调试的独孤九剑

本文是调试九法的读书笔记,方便解不出 Bug时参考。 一、调试九大规则 理解它们并贴在你的电脑旁边 理解系统制造失败不要想,而要看分而治之一次只改一个地方保持审计跟踪检查插头获得全新观点如果你不修复 bug ,它将依然存在 二、九大规则的具体解释 理解系统 简单来说,就是要熟悉业务。这条规则最重要。 更具体点,你必须知道系统的工作原理以及它是如何设计的,某些情况下,还要知道为什么这样

Visual C++下的一些程序调试和开发技巧

自己平时收集的一些技巧与心得,这里分享出来,普及一下知识。        1.如何在Release状态下进行调试   Project->Setting=>ProjectSetting对话框,选择Release状态。C/C++标签中的Category选General,Optimizations选Disable(Debug),Debut info选Program Database。在Link标