ASP两种调试程序的方法

程序

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

一,流程编号

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

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

二,简化流程

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

时间: 2016-02-04

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

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

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

介绍两种调试程序的方法

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

AJAX 开发的两种不同的方法

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

SQL服务器内存有两种基本管理方法:动态分配和静态分配

动态|服务器|静态 SQL服务器内存有两种基本管理方法:动态分配和静态分配 控制程序可使用的内存数量.动态分配允许管理员声明一块内存的大小:考虑到它的实际使用,SQL服务器可以分配给其需要占用的内存的最大值,并且(理论上)在没有使用内存的情况下将其释放.静态分配则是创建一块固定的内存空间,提供给SQL Server使用--不再进行分配. 在默认情况下,SQL Server被设置成动态分配,分配给其正在运行的计算机内所有可用的物理内存.许多管理员注意到SQL Server内存随时间的流逝被逐渐消耗

用两种不同的方法来求实现数字字符串的最大,最小和平均值

字符串 用两种不同的方法来求实现数字字符串的最大,最小和平均值 <%@ LANGUAGE = "VBScript"ENABLESESSIONSTATE = False %><%'1. Selecting the numbers from a string:myString = "2, 4, 6, 8, 10, 12"aValues = Split(myString, ",", -1, 1)</P><P>F

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

两种不同的方法实现js对checkbox进行全选和反选_javascript技巧

通过两种不同的方法实现用js来对checkbox进行全选和反选: 方法一: 1:js实现checkbox的 全选 功能: 复制代码 代码如下: function checkAll() { var code_Values = document.getElementsByTagName("input"); for(i = 0;i < code_Values.length;i++){ if(code_Values[i].type == "checkbox") { c

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

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

Android两种不同的方法去实现图像的放大与缩小(很有帮助)

其实不算两种不同的方法,只是一个方法用的是硬编码,而另一个用的是MVC设计模式,用的都是同一个类Matrix. 第一种:硬编码方式 MainActivity.java package com.android.yhb; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Matrix; import an