DELPHI编写服务程序总结三--代码质量.doc

DELPHI编写服务程序总结三--代码质量.doc

ID:61506789

大小:76.50 KB

页数:8页

时间:2021-02-08

DELPHI编写服务程序总结三--代码质量.doc_第1页
DELPHI编写服务程序总结三--代码质量.doc_第2页
DELPHI编写服务程序总结三--代码质量.doc_第3页
DELPHI编写服务程序总结三--代码质量.doc_第4页
DELPHI编写服务程序总结三--代码质量.doc_第5页
资源描述:

《DELPHI编写服务程序总结三--代码质量.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、一、提高DELPHI程序的稳定性软件质量是一个产品的生命线,也是关乎软件开发者的幸福关键所在,每天有很多程序员都在因为软件质量而通宵达旦的加班,经常遇到的情况是刚发布的程序不停的发布补丁包。软件质量就像一个噩梦一样,不停的在后面追赶着程序员,让他们疲于奔命,甚至于在程序员中流传着一句话:“生命不息,BUG不止”。今天我们要探究的不是哪些可以重现的BUG,我们把哪些可以重现的BUG不定义为BUG,只有哪些不可重现的BUG,会让你茶饭不思、坐立不安。我曾在一家公司开发服务器软件,结果因为程序不稳定,而且都是

2、一些不可重现的错误,导致我们需要不停的派人盯着服务器运行。不稳定就像一个恶鬼一样终日萦绕在我们心头,领导的不停催促,客户的不停投诉,让我们项目组个个疲于奔命,叫苦连天。我在查了无数个不可重现的BUG发现,主要是由于以下八种原因引起的: 1.变量没有初始化;2.函数返回值没有初始化;3.编译优化导致的错误;4.函数递归;5.消息重入;6.野指针;7.内存泄漏;8.并发;你会发现都是一些细小问题,因此程序员在日常开发中一定要养成好的习惯。二、变量没有初始化DELPHI默认初始化的变量是:全局变量、类成员,其

3、它在函数体的变量都不会初始化,因此一些用于判断或者循环的变量一定要记得初始化,另外枚举类型、申请的内存都需要初始化,PCHAR一定要在末尾加#0。例如:下面的返回结果有可能会出现乱码。functionTempPath:string;beginSetLength(Result,GetTempPath(0,PChar(Result)));GetTempPath(Length(Result),PChar(Result));Result:=PChar(Result);end;正确的写法应该functionTem

4、pPath:string;beginSetLength(Result,GetTempPath(0,PChar(Result)));ZeroMemory(PChar(Result),Length(Result));GetTempPath(Length(Result),PChar(Result));Result:=PChar(Result);end;这个程序就是典型的在申请内存的时候,没有对PCHAR进行初始化,因此末尾有可能是随机值,但是通过ZeroMemory就把末尾赋#0。三、函数返回值没有初始化在D

5、ELPHI中退出函数是使用Exit函数的,有很多函数在退出的时候,没有对函数返回值初始化,那么函数的返回值返回就是一个随机值,对程序运行造成不可重现错误。例如:下面程序的执行结果会让你大吃一惊。procedureNotInitResult;var i:Integer;functionGetString(AValue:Integer):string;begin   ifAValue=0then     Result:='True';end;beginfori:=-1to1dobegin   ShowMes

6、sage(GetString(i));end;end; 你看到的运行结果是:‘’、‘True’、‘True’,正确的写法应该是:procedureNotInitResult;var i:Integer;functionGetString(AValue:Integer):string;begin   ifAValue=0then     Result:='True'    else      Result:=‘’;end;beginfori:=-1to1dobegin   ShowMessage(GetS

7、tring(i));end;end; 因此针对if或者Case语句一定要赋初始值,上面的函数的写法也可以写为:functionGetString(AValue:Integer):string;beginResult:=‘’;ifAValue=0then   Result:='True';end;functionGetString(AValue:Integer):string;begincaseAValueof   0:Result:=‘True’;   elseResult:=‘’;end;end;四、

8、编译优化导致的错误现在的编译器在编译代码的时候会优化掉一些可以不执行的代码,例如:布尔类型优化是最常见的一种,下面的例子能很好的说明这个问题。procedureTForm1.btn1Click(Sender:TObject);var s:string;beginifGetTrueorGetValue1(s)then   ShowMessage('Hello'+s);end; procedureTForm1.btn2Click(Sender:

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。