介绍两种调试程序的方法

程序

大家在调试一个程序时,有时候可能这个程序很长,多到成百上千行的代码,如果你的程序写的又零乱不堪,到了这种时候通常都不知道自己写了些什么,有些人还比较懒,像我,连个注释都不写,但是我从来没有被我的程序搞晕过,一般来说,不管你的程序是不是面向对像的开发模式,在局部的程序代码里,你的程序还是结构式的,如果你没有把一个模块分成几个小模块去做,而是几百行甚至上千行的代码全在一个模块里,那么一但出了问题,你恐怕哭都来不及,你不得不整天整天的找bug,就算你的程序运行上没有问题,而在设计上却有漏洞什么的。。。。你找起来一定很累,还有分析别人的代码很累吧,要是人家连个注释都没给你留,那你是不是很痛苦??以至于程序员都不愿意看别人写的代码。。。。。等等地,现在我就介绍大家两种调试程序的方法,这些方法最适用于分析模块代码,可以将一段没有任何注释的代码轻松的解析出来它的用途,好了先为大家介绍第一种:
一,流程编号
程序的主体就是流程控制,把流程搞清楚了,整个程序就看懂了,方法其实简单:如果你的ide开发工具有对某行做标记并且还可以编号的功能自然就方便很多,如果没有就把源程序copy到记事本上,然后开始给控制流程编号,例如:
1 for(a=1,a++,,)
{
2 if(a=10)
{
......
2 }
1 }
3 if(a=11)
{
printf("程序执行有问题")
3 }

在上面的例子中,编号的规则是:当见到第一个流程控制就在它的开始处加一个号,然后接着往下找,找到一个流程控制就判断一下它是旧流程结束还是新流程开始的,如果是旧流程的结束就再标记上这个流程在开始处的标号,如果脑子里乱了,不知道是多少了,就向上找直到找到目前最大的标号(但是已经被其它结束语句占有的不能算数),其实,你只要看到标号开始呈下趋势,那么你现在找到的最大标号就是这个结束语句的标号了------该流程的标号!!还有,每个流程的标号都是按顺序依次递增,越是里层的流程,标号就最大,最外层的标号最小。在标号的同时你还可以留意一下,你最初的标号是否已经标出了结束语句,如果是的话,你就应该检查一下,这个结束语句是不是有很明显的错误,如:我的给最初的标号是一,也就是第一层结构的标号是1,但是当我标到某个结束语句为1时却发现下一行还剩着一个"}"这就很明显不对了,这时有两点原因,一,你标号标错了,二,程序中多了一个结束语句,这时你就要好好检查一下了,找出错误了就开始继续做标号,直到标完,标完了以后,你就可以开始分析这个程序了,只要是在两个相同标号这间的,都是一个小模块,你把每个模块的大体用途都分析出来(加上注释),然后再再把这些模块的用途放到一起就可以一眼看出来整个程序比较详细的动作流程和它所能完成的任务,还可以在注释中很直观的看出来这个程序中所存在的问题(前后矛盾,参数不存在,数据类型不符。。。。。。。。。等等,都很容易能看到)
二,简化流程
当你的一个比较复杂的程序,程序中有大但的流程控制,一层套一层,看得你眼花廖乱,恨不得把电脑砸了!!!~~~ :( 唉哪能呢,砸了电脑我玩儿什么呀???不过你实在气不过了,你索性把程序删它几百行,哈哈是不是很过瘾呢,不过给大家一个忠告,别忘了先备份呀,省得你又后悔~~~~~,方法是这样的:先把你弄不懂的地方从最里边的流程开始删,由里向外一层一层的删除,每删一层就看看找到程序出错的问题了吗???没有??继续!!!直到删到最外层,基本上是差不多了,这种方法就是可以把程序中那些看不懂的地方复杂的地方一步一步的简化,直到问题清晰可见!!!!

时间: 2024-10-27 20:38:49

介绍两种调试程序的方法的相关文章

给大家介绍两种调试程序的方法,希望版主帖到精华区里!!!!!!

程序|精华 大家在调试一个程序时,有时候可能这个程序很长,多到成百上千行的代码,如果你的程序写的又零乱不堪,到了这种时候通常都不知道自己写了些什么,有些人还比较懒,像我,连个注释都不写,但是我从来没有被我的程序搞晕过,一般来说,不管你的程序是不是面向对像的开发模式,在局部的程序代码里,你的程序还是结构式的,如果你没有把一个模块分成几个小模块去做,而是几百行甚至上千行的代码全在一个模块里,那么一但出了问题,你恐怕哭都来不及,你不得不整天整天的找bug,就算你的程序运行上没有问题,而在设计上却有漏洞

ASP两种调试程序的方法

程序 大家在调试一个程序时,有时候可能这个程序很长,多到成百上千行的代码,如果你的程序写的又零乱不堪,到了这种时候通常都不知道自己写了些什么,有些人还比较懒,像我,连个注释都不写,但是我从来没有被我的程序搞晕过,一般来说,不管你的程序是不是面向对像的开发模式,在局部的程序代码里,你的程序还是结构式的,如果你没有把一个模块分成几个小模块去做,而是几百行甚至上千行的代码全在一个模块里,那么一但出了问题,你恐怕哭都来不及,你不得不整天整天的找bug,就算你的程序运行上没有问题,而在设计上却有漏洞什么的

Android——Fragment介绍及两种基本使用方法

       今天在调ViewPager的时候,感觉ViewPager+Fragment这种做法更灵活,所以,现在拿出来Fragment再整理下. 一,为什么要用Fragment          1,灵活布局                          Fragment表现Activity中用UI的一个行为或者一部分.可以组合多个fragment放在一个单独的activity中来创建一个多界面区域的UI,并可以在多个activity里重用某一个fragment.把fragment想象成一

php两种无限分类方法实例

  这篇文章主要介绍了php两种无限分类方法实例,本文给出了递归方法和非递归方法实现的无限分类实例,需要的朋友可以参考下 一.递归方法 复制代码 代码如下: $items = array( array('id'=>1,'pid'=>0,'name'=>'一级11'), array('id'=>2,'pid'=>0,'name'=>'一级12'), array('id'=>3,'pid'=>1,'name'=>'二级21'), array('id'=&g

thinkPHP中钩子的两种配置调用方法详解_php实例

本文实例讲述了thinkPHP中钩子的两种配置调用方法.分享给大家供大家参考,具体如下: thinkphp的钩子行为类是一个比较难以理解的问题,网上有很多写thinkphp钩子类的文章,我也是根据网上的文章来设置thinkphp的钩子行为的,但根据这些网上的文章,我在设置的过程中,尝试了十几次都没有成功,不过,我还是没有放弃,最后还是在一边调节细节,一边试验的过程中实现了钩子行为的设置.下面是我个人的设置经验,在这里跟大家分享一下. 个人做了两种设置,都试验成功了,一个简单点,在thinkphp

介绍一种有效的方法实现在RTC中多个stream之间代码同步

Rational Team Concert(RTC)虽然作为目前流行的代码管理工具之一,但对于多 stream 上的源代码同步,大多数http://www.aliyun.com/zixun/aggregation/7155.html">开发人员是通过在每个 stream 上重复提交代码并且人工保证同步,这无疑增加了我们平时开发的成本.本文将主要介绍一种有效的方法,以实现在 RTC 中多个 stream 之间代码同步,从而降低重复提交代码的成本,避免由于重复提交代码所带来的缺陷. Strea

识别iPhone5s真假 iphone 5s的两种最好的方法

首先建议大家到正规场所购买手机,苹果手机毕竟价格那么高,买了山寨版的手机挺郁闷的,下面介绍两种鉴别手机是否是真iphone 5s还是假iphone 5s的方法,仅供参考! 1.相机及闪光灯 iPhone5的后置相机镜头和闪光灯都有金属圈包围着,不过原来iPhone5s已经改变了这个设计.究竟这个是纯粹外观设计的考虑,还是改善镜头入尘情况就不得而知了.     2.底部插槽及螺丝 iPhone5无论黑色还是白色,底部的耳机和Lightning插槽都有颜色相对的金属圈,分别是银色和黑色.iPhone

thinkPHP中钩子的两种配置调用方法详解

本文实例讲述了thinkPHP中钩子的两种配置调用方法.分享给大家供大家参考,具体如下: thinkphp的钩子行为类是一个比较难以理解的问题,网上有很多写thinkphp钩子类的文章,我也是根据网上的文章来设置thinkphp的钩子行为的,但根据这些网上的文章,我在设置的过程中,尝试了十几次都没有成功,不过,我还是没有放弃,最后还是在一边调节细节,一边试验的过程中实现了钩子行为的设置.下面是我个人的设置经验,在这里跟大家分享一下. 个人做了两种设置,都试验成功了,一个简单点,在thinkphp

AJAX 开发的两种不同的方法

ajax     最近几年Ajax应用程序开发出现了两种截然不同的方法,每一种方法都对以前的结构模型进行扩展.由于两种方法性质看起来是不同的,所以在实际应用程序的开发中应选择其中一种.     当我们第一次听到Ajax这个术语的时候,我们的第一反应可能就是其较高的Web页面交互性.至少在JavaScript中的Web应用程序部分必要的代码提供交互性,虽然在Ajax应用程序意义方面都有一致的意见,但对于开发者如何与JavaScript进行交互或者如何在客户端与服务器之间分配显示逻辑有一些分歧.