代码静态分析工具splint的学习与使用

代码静态分析工具splint的学习与使用

ID:20612021

大小:134.18 KB

页数:8页

时间:2018-10-14

代码静态分析工具splint的学习与使用_第1页
代码静态分析工具splint的学习与使用_第2页
代码静态分析工具splint的学习与使用_第3页
代码静态分析工具splint的学习与使用_第4页
代码静态分析工具splint的学习与使用_第5页
资源描述:

《代码静态分析工具splint的学习与使用》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、引言«近在项FI屮使用了静态程序分析工具PC-Lint,体会到它在项FI实施中带给开发人员的方便。PC-Lint足一款针对C/C++语言、windows平台的静态分析工具,FlexeLint足针对其他平台的PC-Lint版本。由于PC-Lint/FlexeLint是商业的程序分析工具,不便于大家对其进行学习和使用,因而K面我将介绍一个针对C语言的开源程序静态分析工具——splint。静态程序分析先来说说什么是“静态程序分析(Staticprogramanalysis)”,静态程序分析是指使用白动化工再软件对程序源代码进行检查,以分析程序行为的技术,应

2、用于程序的正确性检查、安全缺陷检测、程序优化等。它的特点就是不执行程序,相反,通过在真实或模拟环境中执行程序进行分析的方法称为“动态程序分析(Dynamicprogramanalysis)”。那在什么情况下需要进行静态程序分析呢?静态程序分析往往作为一个多人参与的项UI屮代码审查过程的一个阶段,因编写完一部分代码之后就可以进行静态分析,分析过程不需要执行整个程序,这有助于在项目早期发现以卜问题:变呈声明了但未使用、变M类型不匹配、变贷在使用前未定义、不可达代码、死循环、数组越界、内存池漏等。下阁说明了静态程序分析在进行项H编码过程屮所处的位置:项目分

3、析阶段:制定项目中统一使用的静态分析标准项目编码阶段:静态分析]"^修补改进K代码上库从上图可以知道,静态分析工具在代码通过编译之f再对代码进行分析。我们会静态分析工具与编译器相比,所做的工作杏什么不同?静态分析工具相比编译器,对代码进行了更加严格的检查,像数组越界访问、内存泄漏、使用不当的类型转换等问题,都可以通过静态分析工具检查出来,我们甚至可以在分析工只的分析标准里定义代码的编写规范,在检测到不符合编%规范的代码吋抛ili告警,这些功能都是编译器没有的。既然静态分析工具发挥了不小的作川,何不在编译器里兼备静态分析的功能?对于这个问题,S.C.J

4、ohnson(他足最古老的静态分析工具Lint的作者)在其1978年发表的论文《Lint,aCProgramChecker》中给岀了他的答案:“Lint与C编译器在功能上的分离既有历史原冈,也奋现实的意义。编译器负责把C源程序快速、商效地转变为可执行文件,不对代码做类型检查(特别是对分别编译的程序),有益于做到快速与高效。而Lint没有“高效”的要求,可以花更多吋间对代码进行更深入、仔细的检查。”针对空指针提取、未定义变量使用、类型转换、内存管理、函数接口定义等,我们付以在静态分析工具里制定不同的检测标准,以卜‘曲线图说明了在使川splint进行分析

5、吋,检测标准与splint运行的开销所对成的关系,从另一个角度看,也说明了静态分析工具与编译器的关系:FormalVerificationToolsAmountofHflorlRequiredJSP^ACISJStxJO5.XPPJ.Isplint掌握了“静态分析”等概念之后,我们再來看splint。在Linux命令行下,splint的使用很简华,检测文件*X,只要这样使用就可以了:splint氺.cl.splint消息我们通过以下例了•来认识典型的splint告筲信息:1//splint_msg.c2intfuncsplintmsgl(void)3

6、{4inta;5returnO;6}7intfuncsplint_msg2(void)1{2int*a=(int*)malloc(sizeof(int));3a=NULL;4returnO;5}运行splintsplint_msg.c之后,我们来看输出的告警信息:splintmsg.c:(infunctionfuncsplintmsgl)splintmsg.c:4:6:VariableadeclaredbutnotusedAvariableisdeclaredbutneverused.Use/氺@unused@*/infrontofdeclarati

7、ontosuppressmessage.(Use-varusetoinhibitwarning)splint_msg.c:(infunctionfunc_splint_msg2)splintmsg.c:10:2:Freshstoragea(typeint氺)notreleasedbeforeassignment:a=NULLAmemoryleakhasbeendetected.Storageallocatedlocallyisnotreleasedbeforethelastreferencetoitislost.(Use-mustfreefresht

8、oinhibitwarning)splint_msg.c:9:37:Freshstorageacreated

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

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

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