说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

编程调试和诊断的五大规则

HTML文档下载 WORD文档下载 PDF文档下载
在编程过程中,调试和诊断如影相随,以确保程序的完美运行,这就像是一门艺术。本文详述了调试和诊断的五大规则,包括编程前后的不同事项。分享给各位程序员,希望能对你们有用。

导读:Micheal Shallop是一位资深的Web开发者,软件工程师。6月21号在DZone上发表文章The Top 5 Debugging and Diagnostic Rules for Programming,分享自己多年的工作经验。下面是编译内容。

在我的职业生涯中,不管是系统开发、系统设计、还是系统调试,我都是这些方面的专家。对于我的成就,我很自豪。后来我大部分时间都花在系统检查上。“系统崩溃了”是我经常听到的话。

在一个进行了三年的项目里,我没有任何假期,甚至没有脱产培训,外出都是带着笔记本电脑,以便于每天早上可以检查头天晚上的运行结果。这种紧张而有序的工作情况恐怕不是所有人都能想象得到的。花在技术支持上的时间可以帮我磨练诊断技术——想想看,您正在安装一个你根本看不到的系统,还要和远程专家进行交流。时间久了,技术就是这样慢慢积累起来的。

还是来说说重点吧,在这些年的工作当中我已经学到了很多编程调试很诊断的东西。我目前的任务是编写一个后端数据系统,100%的可伸缩,水平和垂直方向的,使用的是开源服务项目,例如mongo,mysql,rabbitmq和memcache,框架是由我编写的100%PHP。当别人看着我设计出来的系统的时候,我能从他的眼里看出羡慕的眼神——这是知识的力量。可是你有没有发现,现在的高校仍然缺乏在软件/系统调试和诊断方面的综合性专业。

调试的方法主要是目标访问、运行控制以及实时跟踪。调试问题贯穿多种多样的系统,集成开源系统,或者在你自己的代码之间,这就像是一门艺术。在过去的几十年里,我编译了关于诊断技术的非正式列表,很荣幸与你分享。

Rule 1—最后的更改可能会让整个项目前功尽弃

在我做电话技术支持(Pre-Web)的时候,我学到一件事情,如果你花足够长的时间去聆听客户的话,那你就知道怎样解决客户的问题。在大部分情况下,如果系统或软件突然停止工作,原因可能是你在运行环境里做了一些改变,不论是配置还是代码,都会对系统的稳定性有很大的冲击。

一旦你取消改变的项目,重新运行,恢复旧的数据库,撤销程序包,看看系统/软件是否继续工作?如果继续工作,那就能知道是什么导致系统漏洞,同时还可以找到系统崩溃的切入点。

你可能会很惊讶,经验丰富的程序员或管理员会不会经常忽略这条规律?其实,如今的软件是很稳定的,基本上不会自行变动。一旦它突然停止,就必须判断原因是什么,为什么会出现这样的问题。有可能是你作了一些变动。如果没有,就询问团队是谁安装了最后一段程序或谁意外的改动了文件权限等等。

最后要检查的,就是你最先修改的东西。

Rule 2—复制问题

针对软件开发,如果要诊断一个问题,那首要任务是重新把这个问题制造出来,才能从根本上了解并解决问题。有可能需要你真正参与进来:让终端用户确定他们所做的事件的确切顺序,以便能够产生同样的错误。

作为一个软件工程师,在不知道具体问题的时候修复代码的确很难。所以说,在这种情况下,你就不得不重新制造同样的问题。

如果同样的动作产生不一致的结果,比如说,工作第一次,第二次就不工作了,接着第三次第四次第五次都工作,但第六次又不工作了。问题可能出现在数据上,并且需要检查运行时间配置选项、有效载荷、输入和结果。代码不是关键问题,因为代码每次都是以同样的方式执行的。

当然啦,通常情况下也会有特例,不过这些年特例变得越来越罕见了,因为电脑都已经配备了保护内存的功能。数十年前,我讲过一堂内核崩溃分析的课程。稳定就是点动鼠标的一系列顺序,给鼠标驱动程序重新编码,通过内存分配将接收到的顺序输入打印机驱动程序,当发布一个打印命令的时候——核心转储!

如果你能连贯地复制问题,那你就有能力处理代码问题。

Rule 3—找出原因,而不是症状

因为系统都是互相联系的,沿着错误的道路诊断问题是最常见的错误,这被称之为“连锁反应”,软件或系统里的问题能够体现在不同的区域,挽回软件的质量只是问题的表面。当问题露出水面的时候,需要仔细想一想:我是要处理问题呢,还是处理看到的症状呢?

当处理一个问题的时候,你只是在问题上兜圈子,你必须停止您的心理过程,只需简单地确定你所处理的问题是表面症状还是有因果关系的。

Rule 4—要有信心

我曾经教过非传统的学生如何开始编程,他们当中的一些人认为电脑是智能的,恶毒的,有密谋的,诡计多端的,阴险狡猾的,看上去就像是一个充满恶作剧的盒子。

电影Short-Circuit(霹雳五号)里有段台词:

它只是一个机器,施罗德。它不会生气,没有快乐,不知道难过,不会嘲笑你的笑话...它只会运行程序!

人们往往忘记了这一点,在软件完美运行第一次之后,只要提供相同的数据和稳定的运行环境,那它就能一直完美无缺的运行下去。如果在两个对话窗口完成了测试,却在第三个窗口上失败了,其实不要浪费时间检查代码,因为问题不在软件上,而在第三个对话窗口的环境配置上,或者是输入的数据有问题。

不幸的是,能够发现基于软件问题的技术精英实在是很少,因为他们知道这方面几乎所有的问题。

“服务器有问题。”

“软件有问题。”

有些看上去深入的观点其实并没有经过分析。你千万不要因为别人这样的评论而分心,不能被别人误导,更不能动摇自己的立场。尤其当你是负责调试/编写系统或软件的带头人/开发者/管理员的时候。你必须有信心,坚信你的代码、平台和数据库在给出一致的输入和稳定环境的条件下,每次都能在相同的时间内完成运行。

当然,从表面上看,软件或系统可能是“有问题的”,但这并不表明只需简简单单的处理代码块——而是要分析问题范围,了解前置条件,数据源的完整性和输出质量。如果所有的项目都如设计的那样保持一致性,那你就应该看看对话框以外的地方,说不定问题根源就在那里。

Rule 5—记录,记录,再记录

记录在一个开发环境不能被滥用。通过记录,当然,我指的是诊断或提示性信息嵌入到代码库的输出,提供一个初步的问题确定性。要有频率、长时间的记录。

记录信息不仅仅提供洞察代码的问题区域,还给你提供自信——一切都按计划执行/处理/计算,一切都在监控中。记录工作同样可以告诉你这个查询、计算和方法都是成功的。

就我个人而言,我总是硬编码两个级别的登录作为代码的子程序。我经常在每个方法的入口点编写跟踪输出的代码,而且以关键决策点的出现作为条件编写调试代码,然后可以使用我的记录输出手段跟踪程序流,同时关注临界值。因为这些都是运行时方法,系统配置里单独的Boolean可以控制所有的跟踪,所以在非开发环境中信息发送功能是受限制的。

此外,拿记录PHP为例,有一个全域常数:__文件__,__线性__,__方法__和__功能__,这为你提供一个信息记录模板,还有一些其他模板:


随着开发的继续,你的硬编码行数将迅速变得毫无意义,除了搜索键还有点用。编写记录代码要用到所有的信息和有效代码相关的东西。


如果你想知道不同的记录等级之间有什么区别,那我建议你阅读文章10-Commandments of Logging。你可能并不赞同文章里的观点,但我保证你肯定会下决心改变之前的记录方法。

奖励制度

和二十年前我们普遍使用的工具相比起来,今天年轻的程序员使用的先进工具是经过我们不懈的努力创造出来的,这段美好的回忆将是在这个相对年轻领域里奋斗过的前辈们最好的礼物。我的第一个调试工具是printf()和(sh),然而当打印机被广泛使用的时候,转存一个50000-line C-code列表到折叠式记录纸上,一个红色的毡笔头和大量的走廊空间成了我的调试器。

现代调试器是你的朋友,你的得力助手,能够向你的老板证明你简直就是个天才——它允许你在开发阶段分步调试代码和发现问题。不但能分步调试,附加变量监控,还能跳回堆栈,一切都是那么简单,听起来有点不可思议!

总之,如果你不想开发使用调试器,那建议你抽时间给你的IDE安装并配置一个调试程序包。用过你就会很惊讶,如果没有调试器,你该怎么编码?

总结

调试是一个习得的技能,所有的要点都已经在上面提到了,但这也不一定对你有帮助——如果你不知道你的系统,不了解你的应用程序或者是不懂电脑科学的基本规律。

英国科幻作家Arthur C. Clarke说过:任何非常先进的技术,初看都与魔法无异。

对于那些才疏学浅的人来说,观看优秀的开发人员或系统管理员解决复杂程序问题简直就像是玩魔术!真希望那种感觉会激励你努力学习必要的技能来加入到魔法行列。

原文:DZone

广而告之:Databricks终止Shark项目,转至Spark SQL DeNA China副总裁黄雪斌:IP战国时代的生存法则 巴别时代首席执行官赵暕:从页游到手游的完美转身 Oracle借助RESTFUL API扩展移动端版图 优秀求职者应主动问的5个问题 高德LBS智能硬件编程马拉松:硬件复兴,等你挑战! 首届bong线上黑客马拉松:运动数据分析应用bong+获大奖 英特尔推出基于WebRTC的协同通讯方案 凸显本土创新“软”实力 一周消息树:不同设备不同界面的Windows 9正在逼近! 乐卓网络CEO李澄澄:移动游戏IP是把双刃剑 高性能动画!HTML5 Canvas JavaScript框架KineticJS Swift最酷炫的七大功能 微信开发者大会讲师介绍:柳峰与你一起玩转公众平台应用开发 TIOBE 2014年7月编程语言排行榜:仅发布1月,Swift进Top 20! 艾格拉斯CEO王双义:手游自研引擎的荣耀之路 以招行为例,深圳云软黄榕振谈微信公众帐号企业应用高级开发 来自前苹果高管Heidi Roizen的经验之谈 【短讯】Dropbox、微软OneDrive打不开,国内用户该如何应对? 5分钟弄懂Docker! RakNet:被OculusVR收购的跨平台游戏网络引擎 Qualcomm业务拓展副总裁沈劲:智能终端的延伸 苹果发布Xcode 6 Beta 3,Swift迎来重大更新! Linkedln技术高管Jay Kreps:Lambda架构剖析 《近匠》极光推送:聚焦巨头无法快速转身的领域 Babylon.js:拥有微软背景的开源3D游戏引擎 EMC 2014存储布局及十大新技术要点 腾讯推出零流量地图 离线实现公交步行导航 Atmel 1.4亿美元收购Newport Media 巩固物联网产品线 微信大会首批议程出炉 深度解析招行服务号是如何炼成的? 指尖上的阅读:MIT开发盲人专用设备FingerReader 从桌面到移动:异构计算翻天覆地的技术变革 寻找控件DECEDBOX.ocx控件内含一picutrebox 解决问题再送200分 迫切求助!!一个关于html的问题!! 数据库恢复问题,请各位赐教 急。。。。。JBUILDER连接数据时的问题 手写笔 给分 oracle816配置问题 为什么总说找不到servlet类? 有个概念想问下:什么是mysql的断口 SDK程序设计中如何动态清除“Button”等窗体 请教大家Database Desktop中的Autoincrement类型字段不能自动清零的问题 在word文档中使用active控件引发的问题,请大家帮忙,急!!! 帮忙一下! 大家帮帮我吧! 我手头没有winxp光盘,可现在想安装IIS,谁能帮我,好象单独copy几个文件给我也行 关于表单嵌套问题,50分相送! 怎么传递参数给Midas服务器查询? 散个关于时间计算代码让大家品评!给分! 请问如何得到inifile文件的所有小节名? 本是学计算机的!现在却要去教书了!IT梦想泡汤了!! 真诚求解:关于校园局域网得ip地址与网外ip地址得关系问题 谢谢! 在两个web application之间能不能通过session传对象? 怎么把weblogic用向导创建的域删掉,重新配置 简单的问题:关于符号' " & 在word文档中使用active控件引发的问题,想请大家帮忙。急!!! 为什么G.723.1 在DShow里面用不了? 大虾呀、小弟我求救呀!快来帮帮我!郁闷呀! 我安装了win2003后,为什么声音驱动装不了? release为何不行? 在delphi中如何得到mysql里所有的数据库名?急!在线等!! 怎样获得例如另一个网页的内容,然后部分现实,原理是什么 怎样获得例如另一个网页的内容,然后部分显示,原理是什么 100分求MSDN下载地址!!! 菜鸟苦难,高手达人入,简单问题! 我有白头发了,你们也? 请教一个关于datagrid的弱弱的问题 DirectShow中通过摄像头获取图像,如何改变分辨率 关于Win2000做服务器,Win98做客户端,在98中如何设置连接Internet的问题? 我的php是怎么回事呀? 如何访问带密码的Access数据库? 关于程序员的数组方面的问题? 救菜鸟!给个范例! 为什么我在XP下文件夹加密加不了? 在word文档中使用active控件引发的问题。急!!! 我在我的frame中的一个页面中用一个button的onClick="javascript:window.close()"怎么关闭不起作用呢? 帮帮我吧,我asp刚入门,就要做网站,感觉心里好没底...... 红色紧急求救 我在北京找工作,各位仁兄帮帮看看 如何在窗体中动态生成组件? 如何实现显示在线者的信息,如注册会员多少人,访问者多少人等等(附三问) 50分求救,哪里有下载免费的VB6中文版? 月牙泉为什么被称为"沙漠奇观" 小试管中盛有水,U型管液面相平,向试管中加入下列物质,液面不变的有1、氧化钙2、氢氧化钠3、氯化钠4、氢氧化钙5、浓硫酸 第六丶七题怎么写 月牙泉给你留下深刻的印象是什么,为什么 地球OL 怎么才能玩如题 填空第6,7题 让人郁闷的数学题有3个人去投宿,一晚30元.三个人每人掏了10元凑够30元交给了老板.后来老板说今天优惠只要25元就够了,拿出5元命令服务生退还给他们,服务生偷偷藏起了2元,然后,把剩下的3元 成语接龙:全心全意-( )-( )-(成语接龙:全心全意-( )-( )-( ) 求新概念英语2-3册答案(除了选择题.主要是那些句子的答案比如说 改写下面的句子,用what来引导下列的感叹句1 this is a wonderful garden!我要的是 2 3 册课后 我下载 下来了 可无法解压啊 为什么有人觉得英语好学? 英语翻译在那个时候,我的世界就像一个巨大的宴会,溢满了嘈杂的声音和模糊的脸,而我戴上面具,穿着盛装,没有人看得清面具下的脸 已知:如图,等腰三角形ABC中,AC=BC,∠ACB=90°,直线l经过点C(点A、B都在直线l的同侧)AD⊥l,BE⊥L,垂足分别为D.求证:△ADC≌△CEB. 谁有电磁场与电磁波答案 第四版 跪求 英语翻译It's about a global problem that affects so many innocent people worldwide.It's about poverty ,the loss of innocence,an early entry to theharshest realities of life and it'sdefinitely Not Sweet. 26个英文字母如下图排序,求图形所代表的答案? 电磁场与电磁波第四版思考题答案!高教出版社~谢处方 饶克谨 为什么不需要知道毛细管尖口半径最大气泡压力测定液体表面张力 同位素半衰期一样? 《电磁场与电磁波》第四版课后答案 当空气中形成一个半径为r的小气泡时,泡内压力与泡外压力之差为多少? 如何提高自控能力?比如熬夜啊, 请问你有高教出版社《电磁场与电磁波》第四版课后思考题答案么 一道数学题关于导数的;y=cosx/sinx+cosx在P(π/4,1/2)的的切线斜率 如何培养孩子的自控和自抑能力 成长中的你对于长大怀着向往之心还是惧怕之心,说明理由 一道关于导数的数学题log 以x为底 以3为真数的导数 怎样提高自控能力? 急需!请问谁有电磁场与电磁波(许福永、赵克玉.科学出版社)习题答案?有的话拜托您请发我邮箱 愿得一人心白首不分离 很喜欢这句 Did you see Jim?He used to ( ) so wild!Yes.but he ( )any more .He looks very conservative(保守)now.( )he thin in high shool?I don't remember.Yes,and ( )he is.( )he wear glasses?Yes.Does he like to( )the guitar?Yes,he does,but now he likes classical 神马是幸福,幸福是神马?人人都说自己过得不好,不开心,不幸福.为啥我觉得自己生活的很好啊, 只愿得一人心,白首不分离,这清晰的话语,嘲笑孤单的自己,盼望能见到你,却一直在骗自己., 有一道七年级第二学期的数学题不会做题目是:(负三)的三分之一次,除以,(六的三分之四次)的二分之三 雪国列车最后什么意思 可以给我发一份第四版电磁场与电磁波高教出版社的课后答案吗?太感谢了 邮箱:sugerstar1015@yahoo.cn 类似愿得一人心白首不分离的句子 一块直角三角形纸片的两条直角边BC,AB的长分别为15CM,20CM现在要截取一个面积尽可能大的正方形,哪一种大 求电磁场与电磁波第四版(谢处方饶克谨)答案 李行亮《愿得一人心》“只愿得一人心,白首不分离”怎么理解? 直角三角形的两条直角边长分别为15cm和20cm,则该三角形的内切圆的面积为? 电磁场与电磁波(第四版,谢处方,饶克谨 编)课后习题答案. 已知P是三角形ABC所在平面内的一点,若BC向量等于xPA向量加BP向量,其中x属于R,则点P一定在? 一块直角三角形纸片的两条直角边BC,AB的长分别为15cm,20cm要截取一个面积尽可能大的正方形.怎么截? 陈在衡不怕鬼重点字解释 上边一个雁字下边一个月是怎么读的? 地球ol怎么玩 函数f(x)= -x^2+6x+5的单调递减区间是什么, 上面一个疋下面一个月读什么字 这吧有玩地球ol的吗?好多级了 谁给我个装备好一点的号? 陈在衡暮行遇鬼的译文陈在衡先生.三啐之而灭. 秦始皇和汉武帝统治的指导思想有什么不同 地球online怎么玩 地球OL谁邀请我呀!怎么下载? 子字旁加兑念什么?请问这个字念什么? 你们地球OL玩的怎么样? 函数y =2x^3-6x^2+11的单调递减区间为? 如何比较秦始皇和汉武帝 我认为你永远不会爱上我用英语怎么说自从和你聊天以来我一直很伤心用英语怎么说啊,谢谢 〃:函数f(x)=log(x^2-6x+10),则此函数的单调递减区间是.?谢谢大家函数f(x)=log1/2 (x^2-6x+10),则此函数的单调递减区间是.? (1/2为底数) 老公特别喜欢去歌厅,除了这一点别的都很好!可就是这一点身边的朋友都不看好我们结婚,劝我好好想想,说别等结了婚在后悔就晚了,说他现在这样结婚后就更管不了他!我到底该怎么办啊?心里 澳大利亚一墓园将举行”恐怖”派对 迎俄罗斯兴起“护花行动”保护夜行年轻女快讯:浙江黄岩一企业起火 2人跳窗逃嘉兴国际名品城工地脚手架坍塌 工人1当代女画家王玮百幅弥勒造像回乡展在浙日本一老妇睡梦中手脚被绑 300万日俄罗斯兴起“护花行动”保护夜行年轻女新加坡人热衷万圣节 妖魔服装道具销量摩纳哥亲王携王妃出席格蕾丝王妃纪念展世界最高男子结婚 夫妻身高相差76厘欧洲一航空公司推“慈善空姐日历” 泳刚果(金)军队重夺反政府武装“M23美一名侏儒少女天生患有储物癖 家中如新加坡“美丽星期天”活动现缤纷花海(美研究称因感到受尊敬50岁以上人群更调查显示日本半数国民反对《特定秘密保日本新一代消防车设计图出炉 神似机动IPCC中国宣讲会:21世纪末全球气安倍视察台风受灾地伊豆大岛 称将加强日本首相出访土耳其 欲游说其勿购中国日本首相出访土耳其 欲游说其勿购中国重返利物浦“80岁的”《雷雨》遇见20岁的年轻潘基文对马航客机坠毁现场调查受阻深表中国15岁女孩赢美国大赛Mike隋:不想做第二个大山美联储宣布从8月份起将月度购债规模继南非高度戒备严防埃博拉病毒传入境内河南替考案 十余官员被处分纽约黄金期价30日比前一交易日下跌3俄罗斯外交部说美国对俄制裁将使两国关非洲下“禁飞令” 阻致命病毒“乘机”动物在笼子里,副园长权力在笼外教育部:今年起建中小学及大学足球联赛郑伊健祝福梁咏琪当妈纸片井盖第一个开工,错过第一个开业当我跑步时在想些什么家居门店不仅仅是“门脸”(2)荷兰近期发布MH17初步调查报告泰格·伍兹版卡车改装“房车”住进6人
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘