程序员技巧---调试
2016-09-22 11:07
246 查看
索福克勒斯在他的《埃阿斯》中有这样一段话:
这是痛苦的事:
看着你自己的烦恼,并且知道
不是别人,而是你自己一个人所致
自从14世纪以来,bug出现之后,就一直纠缠着程序员们。几百年来也证实了没有人能写出完美的软件,所以调试肯定要占用绝对大量的时间。既然无法避免,那就坦然面对,逢敌必亮剑,狭路相逢勇者胜。
心理
发现bug后,不要去指责肇事者,你应该专注于修正问题。不论bug是谁的过错,你发现了它,它就是你的问题。
从何处开始
在开始查看bug之前,要确保你是在能够成功编译的代码上工作———–没有警告。把时间浪费在设法找出编译器能够为你找出的问题上没有意义!我们要专注于手上更困难的问题。
橡皮鸭
找到问题的原因是一种非常简单、却又特别有用的技术是向别人解释它。他应该越过你的肩膀看着屏幕,不断点头,就像澡盆里的橡皮鸭。他们一个字也不需要说;你只是一步一步解释代码要做什么,常常就能让问题从屏幕上跳出来,宣布自己的存在。下面,让我来为你介绍一个程序调试大法——“橡皮鸭程序调试法”,这个方法在调试界是很出众的,实施起来相当方便和简易,几乎可以随时随地地实验,几乎不需要借助任何的软件和硬件的支持,你甚至可以把你的程序打印出来,在纸面上进行调试。
那么,为什么这个方法要叫做橡皮鸭呢?因为橡皮鸭子是西方人在泡澡时最喜欢玩的一个小玩具,所以,这个东西应该家家户户都必备的。因为,这个方法由西方人发明,所以,就被取名为“橡皮鸭”了。
好了,话不多说,下面是整个调试方法的流程。
找一个橡皮鸭子。你可以去借,去偷,去抢,去买,自己制作……反正你要搞到一个橡皮鸭子。
把这个橡皮鸭子放在你跟前。标准做法是放在你的桌子上,电脑显示器边,或是键盘边,反正是你的跟前,面朝你。
然后,打开你的源代码。不管是电脑里的还是打印出来的。
对着那只橡皮鸭子,把你写下的所有代码,一行一行地,精心地,向这只橡皮鸭子解释清楚。记住,这是解释,你需要解释出你的想法,思路,观点。不然,那只能算是表述,而不是解释。
当你在向这只始终保持沉默的橡皮鸭子解释的过程中,你会发现你的想法,观点,或思路和实际的代码相偏离了,于是你也就找到了代码中的bug。
找到了BUG,一定要记得感谢一下那个橡皮鸭子哦。
什么?你觉得这个方法太“愚蠢”,太“弱智”了?是的,看上去,会这样做的人脑子好像是有点毛病。不过,我要告诉你的是,这个方法的确有效。因为,这就是“Code Review”的雏形!下面让我来给你解释一下。
Once a problem is described in sufficient detail, its solution isobvious.
一旦一个问题被充分地描述了他的细节,那么解决方法也是显而易见的。
我相信在座的各位都有过这样的经历,当你死活都找不到问题的原因的时候,当你寻求他人的帮助时,对别人解释整个你的想法和意图或是问题背景的时候,你自己都没有解释完,就已经找到问题的原因了。这样的经历,相信大家一定有过。这就是这个方法的意义所在。
所以,“橡皮鸭”只是一个形式,其主要目的是要你把自己写的代码做“自查”,也就是自己解释给自己听。当然,为了不让你像个“精神分裂”的程序员,引入“橡皮鸭”是很有必要的(虽然这样还是有点精神病,但比起精神分裂来说算是好的了,嘻嘻)。所以,真实的本质是Code Review。
最后,我想和大家说一下道具“橡皮鸭”。是的,在我们的身边,你不一定能找得“橡皮鸭”,但你可以找到你你的同事,你的朋友,来做这个“橡皮鸭”,当然,他们并不一定有“橡皮鸭”好使,因为你的那些同事或朋友一定会在你解释的时候,随意地发表意见和看法,相当的令人annoying。
这是痛苦的事:
看着你自己的烦恼,并且知道
不是别人,而是你自己一个人所致
自从14世纪以来,bug出现之后,就一直纠缠着程序员们。几百年来也证实了没有人能写出完美的软件,所以调试肯定要占用绝对大量的时间。既然无法避免,那就坦然面对,逢敌必亮剑,狭路相逢勇者胜。
心理
发现bug后,不要去指责肇事者,你应该专注于修正问题。不论bug是谁的过错,你发现了它,它就是你的问题。
从何处开始
在开始查看bug之前,要确保你是在能够成功编译的代码上工作———–没有警告。把时间浪费在设法找出编译器能够为你找出的问题上没有意义!我们要专注于手上更困难的问题。
橡皮鸭
找到问题的原因是一种非常简单、却又特别有用的技术是向别人解释它。他应该越过你的肩膀看着屏幕,不断点头,就像澡盆里的橡皮鸭。他们一个字也不需要说;你只是一步一步解释代码要做什么,常常就能让问题从屏幕上跳出来,宣布自己的存在。下面,让我来为你介绍一个程序调试大法——“橡皮鸭程序调试法”,这个方法在调试界是很出众的,实施起来相当方便和简易,几乎可以随时随地地实验,几乎不需要借助任何的软件和硬件的支持,你甚至可以把你的程序打印出来,在纸面上进行调试。
那么,为什么这个方法要叫做橡皮鸭呢?因为橡皮鸭子是西方人在泡澡时最喜欢玩的一个小玩具,所以,这个东西应该家家户户都必备的。因为,这个方法由西方人发明,所以,就被取名为“橡皮鸭”了。
好了,话不多说,下面是整个调试方法的流程。
找一个橡皮鸭子。你可以去借,去偷,去抢,去买,自己制作……反正你要搞到一个橡皮鸭子。
把这个橡皮鸭子放在你跟前。标准做法是放在你的桌子上,电脑显示器边,或是键盘边,反正是你的跟前,面朝你。
然后,打开你的源代码。不管是电脑里的还是打印出来的。
对着那只橡皮鸭子,把你写下的所有代码,一行一行地,精心地,向这只橡皮鸭子解释清楚。记住,这是解释,你需要解释出你的想法,思路,观点。不然,那只能算是表述,而不是解释。
当你在向这只始终保持沉默的橡皮鸭子解释的过程中,你会发现你的想法,观点,或思路和实际的代码相偏离了,于是你也就找到了代码中的bug。
找到了BUG,一定要记得感谢一下那个橡皮鸭子哦。
什么?你觉得这个方法太“愚蠢”,太“弱智”了?是的,看上去,会这样做的人脑子好像是有点毛病。不过,我要告诉你的是,这个方法的确有效。因为,这就是“Code Review”的雏形!下面让我来给你解释一下。
Once a problem is described in sufficient detail, its solution isobvious.
一旦一个问题被充分地描述了他的细节,那么解决方法也是显而易见的。
我相信在座的各位都有过这样的经历,当你死活都找不到问题的原因的时候,当你寻求他人的帮助时,对别人解释整个你的想法和意图或是问题背景的时候,你自己都没有解释完,就已经找到问题的原因了。这样的经历,相信大家一定有过。这就是这个方法的意义所在。
所以,“橡皮鸭”只是一个形式,其主要目的是要你把自己写的代码做“自查”,也就是自己解释给自己听。当然,为了不让你像个“精神分裂”的程序员,引入“橡皮鸭”是很有必要的(虽然这样还是有点精神病,但比起精神分裂来说算是好的了,嘻嘻)。所以,真实的本质是Code Review。
最后,我想和大家说一下道具“橡皮鸭”。是的,在我们的身边,你不一定能找得“橡皮鸭”,但你可以找到你你的同事,你的朋友,来做这个“橡皮鸭”,当然,他们并不一定有“橡皮鸭”好使,因为你的那些同事或朋友一定会在你解释的时候,随意地发表意见和看法,相当的令人annoying。
相关文章推荐
- SourceProvider.getJniDirectories
- Linux 自检和 SystemTap
- Trac 中文语言安装
- 开发人员、程序员与计算机科学家三者之间的区别
- Python 七步捉虫法
- 软件 bug 的生命周期
- 解放双手:如何在本地调试远程服务器上的Node代码
- 批量自动安装常用软件
- 批量自动安装常用软件
- 企业批量部署RealVNC远程控制软件
- 好用的Markdown编辑器一览
- 程序员必备,程序员四大忌
- 程序员们,做好你手里的俩份试卷
- Firefox2中输入框丢失光标bug的解决方法
- 程序员必备的10大健康装备! 我们要工作更要健康!
- 网上视频站 视频下载利器 优酷网 视频下载 必备 软件 下载[原创]_常用工具_脚本之家
- 路由器的配置与调试
- 对于技术人员的出现了运行时间错误,是否要进行调试的解决方法
- for命令的一些bug分析