日期:2014-04-13  浏览次数:21221 次

大家在调试一个程序时,有时候可能这个程序很长,多到成百上千行的代码,如果你的程序写的又零乱不堪,到了这种时候通常都不知道自己写了些什么,有些人还比较懒,像我,连个注释都不写,但是我从来没有被我的程序搞晕过,一般来说,不管你的程序是不是面向对像的开发模式,在局部的程序代码里,你的程序还是结构式的,如果你没有把一个模块分成几个小模块去做,而是几百行甚至上千行的代码全在一个模块里,那么一但出了问题,你恐怕哭都来不及,你不得不整天整天的找bug,就算你的程序运行上没有问题,而在设计上却有漏洞什么的。。。。你找起来一定很累,还有分析别人的代码很累吧,要是人家连个注释都没给你留,那你是不是很痛苦??以至于程序员都不愿意看别人写的代码。。。。。等等地,现在我就介绍大家两种调试程序的方法,这些方法最适用于分析模块代码,可以将一段没有任何注释的代码轻松的解析出来它的用途,好了先为大家介绍第一种:

一,流程编号

程序的主体就是流程控制,把流程搞清楚了,整个程序就看懂了,方法其实简单:如果你的ide开发工具有对某行做标记并且还可以编号的功能自然就方便很多,如果没有就把源程序copy到记事本上,然后开始给控制流程编号,例如:
1 for(a=1,a++,,)
{
2 if(a=10)
{
......
2 }
1 }
3 if(a=11)
{
printf("程序执行有问题")
3 }

在上面的例子中,编号的规则是:当见到第一个流程控制就在它的开始处加一个号,然后接着往下找,找到一个流程控制就判断一下它是旧流程结束还是新流程开始的,如果是旧流程的结束就再标记上这个流程在开始处的标号,如果脑子里乱了,不知道是多少了,就向上找直到找到目前最大的标号(但是已经被其它结束语句占有的不能算数),其实,你只要看到标号开始呈下趋势,那么你现在找到的最大标号就是这个结束语句的标号了------该流程的标号!!还有,每个流程的标号都是按顺序依次递增,越是里层的流程,标号就最大,最外层的标号最小。在标号的同时你还可以留意一下,你最初的标号是否已经标出了结束语句,如果是的话,你就应该检查一下,这个结束语句是不是有很明显的错误,如:我的给最初的标号是一,也就是第一层结构的标号是1,但是当我标到某个结束语句为1时却发现下一行还剩着一个"}"这就很明显不对了,这时有两点原因,一,你标号标错了,二,程序中多了一个结束语句,这时你就要好好检查一下了,找出错误了就开始继续做标号,直到标完,标完了以后,你就可以开始分析这个程序了,只要是在两个相同标号这间的,都是一个小模块,你把每个模块的大体用途都分析出来(加上注释),然后再再把这些模块的用途放到一起就可以一眼看出来整个程序比较详细的动作流程和它所能完成的任务,还可以在注释中很直观的看出来这个程序中所存在的问题(前后矛盾,参数不存在,数据类型不符。。。。。。。。。等等,都很容易能看到)

二,简化流程

当你的一个比较复杂的程序,程序中有大但的流程控制,一层套一层,看得你眼花廖乱,恨不得把电脑砸了!!!~~~ :( 唉哪能呢,砸了电脑我玩儿什么呀???不过你实在气不过了,你索性把程序删它几百行,哈哈是不是很过瘾呢,不过给大家一个忠告,别忘了先备份呀,省得你又后悔~~~~~,方法是这样的:先把你弄不懂的地方从最里边的流程开始删,由里向外一层一层的删除,每删一层就看看找到程序出错的问题了吗???没有??继续!!!直到删到最外层,基本上是差不多了,这种方法就是可以把程序中那些看不懂的地方复杂的地方一步一步的简化,直到问题清晰可见!!!!