debug makefile 及 lint 软件质量软件

 

PC-Lint使用简介

LINT工具是一种软件质量保证工具,许多国外的大型专业软件公司,如微软公司,都  
把它作为程序检查工具,在程序合入正试版本或交付测试之前一定要保证通过了LINT检查  
,他们要求软件工程师在使用LINT时要打开所有的编译开关,如果一定要关闭某些开关,  
那么要给出关闭这些开关的正当理由。  

  可想而知,如果从我们编码后第一次编译程序时就使用LINT来检查程序,并且保证消  
除所有的LINT告警,我们就不会遇到象今天这么多的告警信息。即使在今天,我们如果能  
抽出一定的精力来消除程序中的LINT告警,以后再维持这种无告警状态就是很容易的了。  
我们程序质量的提高也是不言而喻的。  

  PC-LINT是GIMPEL SOFTWARE公司的产品,其中的内容是非常广泛的,光是选项就有30  
0多个,涉及到程序编译及语法使用中的方方面面。本篇培训材料旨在引导读者入门,学会  
PC-LINT的基本使用方法,起抛砖引玉的作用,能让读者从这里起步继续去研究如何娴熟地  
使用PC-LINT的各种选项,能让它充分为我们的开发工作服务。  

1.概述  
  如果要给LINT工具下一个形象点的定义,那就是:一种更加严格的编译器。它不仅可  
以象普通编译器那样检查出一般的语法错误,还可以检查出那些虽然完全合乎语法要求,  
但很可能是潜在的、不易发现的错误。请看下面的例子:  
1:  
2:char *report( int m, int n, char *p )  
3:{  
4: int result;  
5: char *temp;  
6: long nm;  
7: int i, k, kk;  
8: char name[11] = “Joe Jakeson”;  
9:  
10: nm = n * m;  
11: temp = p == “” “null” : p;  
12: for( i = 0; i 13: {  
14: k++;  
15: kk = i;  
16: }  
17:  
18: if( k== 1 ) result = nm;  
19: else if( kk > 0 ) result = 1;  
20: else if( kk < 0 ) result = -1;  
21:  
22: if( m == result ) return( temp );  
23: else return( name );  
24:}  
  上面的代码用一般的编译器编译是一段有效的代码,但是用PC-LINT编译就会有几个告  
警。首先第8行向name数组赋值时丢掉了nul字符,第10行的乘法精度会失准,第11行的比  
较有问题,第14行的变量k没有初始化,第15行的kk可能没有被初始化,第22行的result也  
有可能没有被初始化,第23行返回的是一个局部对象的地址。这段代码在大部分编译器下  
是可以顺利编译通过的,继续查找其中的错误就要靠人工调试程序,如果程序很大,这将  
是一项烦琐的工作,没有人可以保证能找出所有的这类问题,但PC-LINT只通过一次简单的  
编译就可做到,显然为我们节省了大量的开发时间。  

  下面就让我们看看如何安装使用PC-LINT。  
2.如何安装PC-LINT  
  PC-LINT的软件的安装过程比较复杂,选项较多,下面根据安装过程,逐条说明每一步  
的含义。  
0)如果是zip文件,将ZIP安装文件展开到目录C:lint.ins下,进入COMMAND PROMPT,先  
进行目录映射 subst g: c:lint.ins,然后转到G: , 执行install。其他步骤和下面的从  
软盘安装是一样的。  

1)在A:驱插入PC-LINT安装盘,输入A:>install命令,进入开始安装栏,按任意键继续,  
进入PC-LINT介绍栏,再按任意键继续。  
2)进入环境选择栏,这一栏中有三个选项:  
Windows NT/Windows 95  
MS-DOS(DOS extended)  
OS/2(32bit)  
如果计算机安装了WIN95、WIN97、WIN98或WINNT要选择Windows NT/Windows 95,如果  
只有DOS则选择DOS。  
3)进入安装目录选择栏,它推荐的是C:>LINT,如不想安装在这个目录下,可输入自己想  
要安装的目录,然后按回车确认,如果要安装的目录不存在,它会提示为你建立这个目录  
。我们这里选C:>LINT  
4)选择安装盘所在的磁盘驱动器,我们这里选A:  
5)判断是否要选择多种编译器或编译库的配置,如果要对不同编译环境下的程序进行L  

//这个好使过
基本原理是一样的:  
1)选取 menu | tools | customize…..  
2)选取 Tools Tab:  
3)点按主对话框上方的虚线小方框 New a tool item  
4)输入 name: PC-LINT  
5)输入 Command: c:lintlint-nt.exe  
6)输入 Arguments: c:lintstd.lnt $(FilePath)   //注:替std.lnt为lntenv-vc6.lnt
7) 选择 (x) Use Output Window  
8)Close  
完成后,在tools菜单下就会有一项PC-LINT选项。  
下面是笔者在VC6 / Win NT 4.0 的情况下的TOOL配置图:  
3.3LINT选项  
LINT选项可以放在注释中,例如:  
  
//lint option1 option2 … optional commentary  
选项间要以空格分开,lint命令一定要小写,并且紧跟在 ((x) /o)   
LINT的选项很多共有300多种,大体可分为以下几类:  
1)错误信息禁止选项  
该类选项是用于禁止生成某类错误信息的选项,最常用的是-e和+e,-e是禁止生成某类错  
误信息,+e是恢复生成某类错误信息。运行lint目录下的msg.exe可以得到msg.txt文件,  
这个长达5000行的文件包含了所有的错误信息 和解释。  
-w 对于所有大于级别的告警信息都不显示。  
-wlib()对于所有大于级别的关于库函数数的告警信息都不显示。我们可以用-wlib(0)来屏  
蔽所有的库函数的告警信息,-wlib(1)只显示库函数中的句法错误。  
-esym(#,) 可以屏蔽对于特定符 的某告警信息。  
2)变量类型大小选项  
不同的目标机、编译系统变量类型的的大小(如短整形变量、整形变量等)会有所不同,  
该类选项用于为目标机设置变量类型的大小。由于默认的设置与大部分的编译器是匹配的  
,这些专门的设置通常情况下是不需要的,只在特别的目标机结构中才用。例如一个M680  
00目标机,它的int类型和指针类型通常是32bit的,这时你应该使用选项:-si4  
-sp4。这些尺寸参数的当前值可以通过help屏来获得,例如可以输入以下命令行:  
lin -si4 -sp4 nbsp; 
3)冗长信息选项  
冗长信息指的是LINT过程中产生的一些与编译过程有关的信息,而不是真正的告警信息、  
错误信息等。是否生成这些信息可以通过-v和+v选项来决定。+v是生成这些信息,-v是关  
闭这些信息,这组选项中除+v外,其它所有选项都可以关闭+v选项。  
4)标记选项  
以+f、++f、-f和–f开头的选项是标记选项。他们的逻辑含义分别如下:  
+f…:通过把标志置为1而把它置为ON  
-f…:通过把标志置为0而把它置为OFF  
++f…:标志增1  
–f…:标志减1  
后面两个用于你想在局部把一个标志置为ON的情况,而不影响全局设置。例如你可以这样  
使用:  
  
int printf( );  
  
标记选项的种类很多,基本含义是用于打开或关闭某类语法情况使用,例如允许使用缩写  
结构体名称,允许使用无名联合体,把所有模块当作C++编译等。  
5)消息显示选项  
消息显示选项用于定义消息输出格式。主要有消息高度选项、消息宽度选项、消息格式选  
项等。  
6)其它选项  
其它选项中的种类很多,各种类间差异很大,在这里就不一一介绍了,建议大家看一看《  
PC-LINT》一书,第五章有对每种选项的详细说明。lint本身也有一些说明信息, lint-n  
t 2> lint.txt 然后狂按几个回车就可以生成一个lint选项的说明文件。  
4.LINT一个工程下的多个C文件  
4.1为何要LINT多个C文件  
在程序编码初期,我们关心的可能只是单个C模块种中的语法问题,等到编程后期,对于由  
多个C模块组成的程序,我们希望了解当把多个模块连接在一起后是否还有存在于模块间的  
语法问题。这时编译器虽然能给出一些告警,但PC-LINT的连接能给出更多的告警。还有当  
我们能保证其中的几个模块相对稳定,而另外几个模块仍有问题时可以先将几个稳定的模  
块编译连接成一个目标文件,文件每次修改完成后先单独编译,然后连接入总的目标文件  
。  
4.2如何LINT一个工程下的多个C文件  
象我们平时使用的编译工具一样,PC-LINT在编译连接多个C文件时也会先把每个C文件编译  
生成中间的目标文件*.lob,然后再将所有的LOB文件连接在一起。LOB是Lint Object Mod  
ule的缩写。这个文件中包含了一个C或C++模块的所有外部信息。生成LOB文件时有三种选  
项要注意:第一种是-u,如果要LINT生成LOB文件,就一定要加-u选项;第二种是-zero或  
-zero(500)选项,为了保证LOB文件在模块存在错误的情况下也能生成,就一定要加这个选  
项;第三种是-oo[(filename)],filename是生成的LOB文件的名称,在-oo后面,可加,也  
可不加,如不加,则LOB文件名与原C模块的名称相同,例如:  
lint -u alpha.c -oo(a1)  
生成的LOB文件名为:a1.lob  
lint -u alpha.c -oo  
生成的LOB文件名为:alpha.lob  
LINT一个工程下的多个C模块,在用户的源程序目录下一般需要三个文件: 一个选项文件  
(*.lnt)、一个批处理文件(*.bat)和一个MAKEFILE文件(*.mak)。下面一一讲述如何  
制作这些文件。  
1)选项文件(*.lnt)  
选项文件在前面也提到过,你可以把你LINT每个C文件时时用到的所有公共选项罗列在该文  
件中,选项生效的顺序按照从左到右,从上到下的原则。该类文件可以层层嵌套,嵌套的  
层数没有限制。例如make.lnt文件:  
-iC:lint  
std.lnt  
+os(temp)  
-e46  
+vm  
-zero  
2)批处理文件(*.bat)  
制作批处理文件时要注意要在该文件中调用TCMAKE.EXE文件和MAKEFILE文件,例如lintma  
ke.mak文件:  
@echo Lint Making ‘makelap’:  
tcmake -flintmake.mak  
@echo End of making  
3)MAKEFILE文件(*.mak)  
MAKEFILE使用的TCMAKE的语法,和我们平时开发编译时使用的MAKEFILE文件语法格式一样  
,例如下面的lintmake.mak文件:  
MCCPATH = c:mcc68k  
OPTION = -u make.lnt -oo  
GLOBLE = os.h l2lap.h  
mail_depend = $(GLOBLE) q931.h mail.h  
lapmain_depend = $(GLOBLE) l1pubdef.h q931.h mail.h  
lapos_depend = $(GLOBLE)  
fhdlc1_depend = $(GLOBLE) cpuhdlc.h bd_prar.h q931.h  
OBJ = mail.lob lapmain.lob lapos.lob fhdlc1.lob  
project.lob : $(OBJ)  
lint-nt make.lnt -e768 -e769 *.lob  
mail.lob: mail.c $(mail_depend)  
lint-nt $(OPTION) mail.c  
lapmain.lob: lapmain.c $(lapmain_depend)  
lint-nt $(OPTION) lapmain.c  
lapos.lob: lapos.c $(lapos_depend)  
lint-nt $(OPTION) lapos.c  
fhdlc1.lob: fhdlc1.c $(fhdlc1_depend)  
lint-nt $(OPTION) fhdlc1.c  
4.3简单的LINT多个文件  
假设我们的工程不复杂,我们可以负担起每次都将所有的文件都lint一遍的开销,也可以  
不使用上面的正规用法。笔者在实践中发现,将所有的*.c文件放在一个lint命令中,同样  
能完成lint整个工程的目的。  
如:  
lint-nt c:lintstd.lnt AllMySource.lnt  
在AllMySource.lnt中包括你的工程中的所有源文件:  
a1.c  
a2.c  
a3.c  
需要注意的是,在std.lnt文件中就不需要-u选项了。因为我们已经提供了所有的信息  
  

下载链接

http://amine.nease.net/down/pclint.zip

http://xyzboard.com/xyz_soft/PC.Lint.v8.00e.zip

原文:http://harrisonhuanglin.spaces.live.com/blog/cns!6EEDA08E2A9C506D!158.entry

文章知识点与官方知识档案匹配,可进一步学习相关知识C技能树首页概览113946 人正在系统学习中 相关资源:Veneer:文件屏蔽软件-开源-其它代码类资源-CSDN文库

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2014年6月23日
下一篇 2014年6月24日

相关推荐