如何更好更快的debug

2016-01-29 18:32 6 1 收藏

如何更好更快的debug,如何更好更快的debug

【 tulaoshi.com - ASP 】

  有人说web程序员不算是真正的程序员,刚听到这句话的时候很气愤,但仔细想想,这话还是很有道理的。可以说,大部分的web程序员不能算是真正的程序员,因为他们的大部分注意力在实现功能上,而对一些程序员必须要掌握的东西丝毫不在意。可以这么说,还不会爬就想跑了。
可能你不会同意上面的话,但问一下自己,除了改改例子实现功能以外,你对一些基本的东西有多少了解?先不说那些复杂的诸如面向对象一类的东西,我们就说说简单的排错、纠错吧,你做了多少?
想想看,作为程序员恐怕每天大多数的时间是在debug,但究竟有多少人真正掌握合理的、科学的去debug呢?以前的web编程语言象asp/php/cgi等关于debug的功能很弱,但现在的c#及java提供了丰富的debug手段,但你用了多少呢?你可能对System.Data.SqlClient的每个类、每个方法、每个属性都了如指掌,但你对System.Diagnostics了解多少呢?
现代的编程语言如c++ , java , c#等都十分重视对错误的防止、处理,在这儿我就讲一下在c#里的排错、纠错,希望大家能从中学到一些有用的东西,希望以后不会再听到文章开头那句话。
debug最理想的状态是什么?这个不用我说,那就是defect free,没有bug,呵呵。但早有人说了,没有bug那还叫程序吗?win2000还60000多个bug呢。所以我们要做到的是尽量防止bug,bug出现后能迅速定位问题所在,修正这个bug。.net提供了很丰富的debug手段,除了一些debug相关的nampespace,c#语言本身也有相关的内容存在。常用的有条件编译、try/catch、trace以及断言(Assert)等,如果你能熟练掌握这些手段,综合运用,那么debug将不再是一场恶梦,也不会像现在这样出现一点儿问题就满论坛追着人问:“我这儿又出错了,为什么呀?”。下面我将分别讲一下这些手段的运用。

一、捕捉异常(try / catch /finally)
这个我不用说,大家都清楚它的作用,就是捕捉程序中所有可能导致错误的异常,然后加入自己的处理措施,并且使程序继续运行,而如果不捕捉异常的话,程序将会终止,简单的把错误信息发送给客户。
所以,在进行所有可能出现错误的操作时都应该捕捉异常,象下面这个例子,捕捉数据库操作可能出现的异常。

/// <summary
/// 取得数据库连接
/// </summary
/// <param name="a_strDatabase"数据库名</param
/// <param name="oa_objConnection"输出参数,空数据库连接</param
public void GetConnection(string a_strDatabase , out SqlConnection oa_objConnection)
{
oa_objConnection = null ;
string strConnStr = "";
try
{
strConnStr = "server=" + m_objIni.GetProperty("server") + ";uid="
+ m_objIni.GetProperty("uid") + ";pwd=" + m_objIni.GetProperty("password")
+ ";database=" + a_strDatabase ;
oa_objConnection = new SqlConnection(strConnStr) ;

oa_objConnection.Open() ;

//log it
m_objLog.Write("数据库连接ok") ;
}
catch(SqlException e)
{
//log it
m_objLog.Write("数据库连接出错" , e) ;

#if DEBUG
Console.WriteLine(e.ToString()) ;
#endif//DEBUG
throw(e) ;
}
}

}//end class

二、条件编译
java不提供条件编译,这是我觉得java不好的一个原因之一,所以在写java时都是自己写一个类来实现条件编译。那么,什么是条件编译呢?就是当符合某一条件时编译,不符合时就不编译,这就方便了debug。我们经常遇到这种情况,在某一过程或方法里我们想要知道某个变量的值,比较常用的方法是在页面或控制台输出这个变量的值,已确定是否是自己希望的值,但如果没有条件编译的话,但当你发布发行版本时需要手工删掉这些输出语句,费时、费力,并且容易出错,而如果有条件编译,那就方便多了。看下面这个例子:
/// <summary
/// 初始化
/// </summary
private void Initialize()
{
try
{
m_objConnManager = new ConnManager(m_strIniFilePath , "./config/newsdata.ini") ;
log = new Log("./logs/newserver.log") ;
}
catch(Exception e)
{

#if DEBUG
Console.WriteLine("初始化" + e.Message) ;
#endif//DEBUG
throw(new Exception("初始化" + e.Message)) ;

}


}

注意到其中的#if DEBUG那几句吗?它的作用就是当DEBUG时,在控制台输出异常信息,以便你马上知道出现什么错误,而当不是DEBUG时,那句就不会被编译。

三、断言(Assert)
断言真是一个值得大书特书的好东西,但可惜的是80%的程序员尤其是web程序员不用它,甚至根本就没听说过。很难给断言下一个定义,如果要详细说它的好处,简直都可以写一本书了。简单

来源:http://www.tulaoshi.com/n/20160129/1506220.html

延伸阅读
如何更好的受孕成功 如何更好的受孕成功 ?很多夫妻为了要个宝宝,提前三个月开始就注意饮食和习惯,将身体完全调理好了,然后呢?就是要准备受孕了,可是有夫妻说都准备好了,怎么还不好受孕呀。下面就告诉大家,如何更好的受孕成功。 如何更好的受孕成功        如何更好的受孕成功?多数...
标签: 光圈 相机 摄影
这里主要是讲一些参数方面设置与卡片或者单反相机的应用。具体让自己女友穿什么服装 或者摆什么pose更好看就因人而异了。 首先凡是用相机必须要明白的三个参数 [务必讲相机调成AV档。即光圈优先] 1. 摄影是一门用光的艺术, 摄影,或者说拍照,无非就是你拿着个相机,当你按快门按钮的时候,快门会打开, 过一段时间再关上。就在这一小段...
标签: 电脑入门
一、加速启动Win98 首先,把开机时的蓝天白云删除(如喜欢可不删),或者是当Win98启动时一直按ESC键也可略过该画面,更直接的方法是直接修改根目录下的Msdos.sys文件,只需在[Options]分段一加入:Logo=0,是开机时不再显示。 对Config.sys和Autoexec.bat两文件进行修改。在Config.sys中需留下Himem.sys、 Emm386.exe 就可以了,并为Himem....
标签: 电脑入门
1、您可以通过开通会员业务,来快速升级QQ等级。当天(0:00-23:59)使用QQ在2小时(及2小时以上),根据VIP等级的不同,普通QQ会员用户最多可以为其活跃天数累积1.6天,年费会员用户最多可以为其活跃天数累积1.8天。(点击这里了解同时开通会员和超级QQ,QQ等级如何加速升级?) 2、您还可以通过开通超级QQ业务,来快速升级QQ等级。前提是需要在成...
与孩子沟通要讲究方法 幼儿时期是孩子性格形成的主要阶段,而培养孩子良好性格的关键,是做好与孩子的沟通。家长与孩子的沟通,要注意讲究科学方法。 首先,善于倾听。倾听是沟通的前提。只有倾听孩子的心里话,知道孩子想什么,关注什么和需要什么,才能有针对性地给予孩子关心和帮助,也会使以后的沟通变得更加容易。孩子向您诉说高兴的事...

经验教程

694

收藏

59
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部