[转]DotNet程序之找BUG心得

简介:

这篇文章仅仅是写如何找BUG,只是列出本人这些年来用.net编写程序过程中寻找BUG的一些方式方法,欢迎大伙踊跃跟帖,你的轻描淡写,或许能解除某些人心中由来已久的迷团。

写程序有了BUG是经常的事情,只是它们形式多样,有的直接能看到,有的隐藏比较深,从表象看几乎不能看出来,只有特定的场合能诱发、激活这种BUG,
我们以前经常听到别人讲要如何规范化写代码,注意层次,藕合度,函数的行数等等,这些良言佳句的确能减少我们出错的几率和排错的时间,但人不是机器,出错总是会有的,出了错,如何及时有效地把它揪出来予以更正是最最重要的。

下面我以经常遇到的BUG,结合我的经验谈谈BUG解除之道。
1、显而易见的BUG。在运行web页面或winForm程序时,在页面上、程序界面爆出来的出错提示,某文件或某行出错。这种BUG是比较容易找到,并且可以较为轻易清除的,我们只要按照出错提示找到相应的行,再找出问题所在即可。
2、隐藏的BUG。在常规方式,或者说理想状态下运行时,程序表面一点问题也没有,但是因为客户端环境变化,或者客户提交的参数比较特殊,因为你的一时粗心大意没考虑到这种情况,就诱发了这种BUG的产生。其实只要找到当事人要清除这类型的BUG也不难,但几乎不可能找到诱发此BUG的当事人了。那你就要重新考虑所有的极端情况了,编程不能永远以理想状态去考虑。事实证明,在考虑参数的时候一定要把所有极端情况都考虑进去,例如你希望得到一个int?的参数,就必须同时考虑负数,0,NULL值,MaxValue,MinValue等,缺一不可。因为你永远不能指望客户端按你的理想状态来交互。

解决之道:

1、断点法:

  不论是显而易见,或是藏头露尾的BUG,我们在不能确定具体出错位置的时候,都可以用这种方法.

操作方式是在VS的操作界面上在某一行点右键,弹出菜单中选择“BreakPoint”=》Insert BreakPoint

或直接在左侧灰色框上点鼠标左键。出现一个红色实心小圈,说明你成功在此下了断点。

如果是WEB应用程序,我们可以在右侧解决方案窗口右击某文件,选择“Set as start page”。

最后按F5或从Debug菜单中选择“start debug”或直接在界面中点击绿色的“播放”键。

当程序运行到你指定的断点时,会停下,然后你可以比对上下文,查看各种数据、参数是否符合你的预期。如果有误差,说明在此断点之前BUG就已经产生,在此之前继续下断点,并重复此DEBUG过程;如果在断点这里,所有数据及参数都符合你的预期,那么你可以继续以其后下断点,直到找出错的行。
2、最小系统法:
  

  有时候,面对一个庞大而又有BUG的逻辑,我们会手足无措,不知道该从何下手,光用断点去调试有点费时间,这个时候,应该辅以最小系统法,把心里认为最有可能出错的代码行注释掉,再行编译调试,这样能迅速缩小搜寻范围。毕竟最后问题会指向某个方法中,而这个方法如果按规范来,不会超过13行代码。当然你会说如果我所有的方法都超过130行怎么办?那我建议你先把方法优化一下,把大块头的方法分装成小块头再进行调试。这个建议其实不仅仅对于调试,而且对于以后的代码维护甚至系统升级、代码复用、代码移植都有非常大的好处。
3、直接给值法:
  

  有时候某个方法莫名其妙报错了,也许你有LOG,记录下了出错的地方,但你其实通过LOG只找到了“未将对象设置到对象的引用”,还不知道具体是咋回事,那么你就需要排查该方法的所有参数,是否在进入方法前考虑了极端情况,极端情况我在前面已经说了,如果问题出在参数上,那么很好办,查找该方法的所有引用,并加入调用前的参数判断。如果参数没有问题,那么可以进行单元测试,写一小段代码直接调用这个方法,所有参数先给理想值,再给极端值,相信BUG很快能重现。这里我附带要说一句,方法的参数最好不要太多,太多参数容易导致出错。但你此时又争辩:我必须要20个参数怎么办?其实你只需要新建一个Model类,把这些参数都做为它的字段就行了,这样调用的时候,可以把所有参数封装到类,然后再传实例给方法,这样代码美观不少,同时也降低了笔误导致BUG的可能性。
4、搜索法:
  

  有时候你调用了一个非托管的程序集,然后运行,又报错,通常是没有权限或者XXX没有注册之类的,遇到这种情况最快的方法就是上网搜索答案。像这种由环境造成的错误,一般不会只有你一个人遇到,所有搜索答案是最快的选择,或者你是极少数的那种对操作系统了如执掌的人,可以不用搜索也能解决也说不定。


总结:
1、BUG的可怕之处在于难于找到。
2、把每个方法的行数压缩到理想的范围,一般选13行作为MAX值,可以有效缩短寻找BUG的时间。
3、方法参数个数不要太多。可使代码变得美观,便于后期维护,并减少低级错误的发生率。
4、实在找不到的时候,要记得上网搜答案,但是“未将对象设置到对象的引用”这种错误是不可能有确切答案的。因为你正在使用一个NULL值的某个属性或方法,上帝救不了你,唯有自救。
。。。。。。
希望本文抛砖引玉,更多的朋友请参与进来分享你们的DEBUG心得吧。

本文来自[活跃的毛虫]http://CoreCaiNiao.cnblogs.com/转载请标明出处.


本文转自Work Hard Work Smart博客园博客,原文链接:http://www.cnblogs.com/linlf03/archive/2011/10/13/2210078.html,如需转载请自行联系原作者

目录
相关文章
|
4月前
|
IDE 开发工具
一文解决Visual Studio 2022运行时系统找不到指定文件的错误(简单易懂 亲测有用)
一文解决Visual Studio 2022运行时系统找不到指定文件的错误(简单易懂 亲测有用)
414 0
|
IDE 开发工具
Visual Studio下程序开发: 编译QT程序Debug正常,Release出错
Visual Studio下程序开发: 编译QT程序Debug正常,Release出错
806 0
Visual Studio下程序开发: 编译QT程序Debug正常,Release出错
|
架构师 测试技术 程序员
程序中的Bug是如何产生的?
  ★   Bug,总是令人讨厌的东西。那Bug是如何产生的呢?作为高级软件架构师和软件测试工程师的易哥将在这篇文章中解答这个问题。   ”   说起Bug,大家都认为它是被“写”出来的,即主要在开发阶段产生。   但其实Bug的产生最有可能是在需求阶段(意外吧!这是有统计数据证明的),且在需求阶段产生的Bug影响最大。当然,在设计、开发、使用阶段也会出现Bug。   接下来我们详细了解下Bug的相关知识。
715 0
|
Windows 开发者
Win10 UWP系列:关于错误 0x80073CF9及一个小bug的解决
原文:Win10 UWP系列:关于错误 0x80073CF9及一个小bug的解决 最近一直在开发XX的uwp版本,也是边摸索边做,最近遇到几个比较奇怪的问题,记录于此。 1、项目可用部署到PC,但无法部署到手机,提示以下错误: 错误 : DEP0001 : 意外错误: Install failed. Please contact your software vendor. (Exception from HRESULT: 0x80073CF9 为了方便开发,我将常用的类库引用好、默认的几个页面做好,然后导出成项目模板,新建项目时都从这个模板开始。
1500 0