一种基于Makefile自动编译技术实现的软件源文件静态分析方法

文档序号:9375328阅读:375来源:国知局
一种基于Makefile自动编译技术实现的软件源文件静态分析方法
【技术领域】
[0001]本发明涉及计算机领域,尤其涉及一种基于Makefile自动编译方法的静态分析自动化的方法。
【背景技术】
[0002]软件开发中,为了保证软件的质量,一般会采取多种方式来进行软件品质的确保:编译器分析,静态分析,单元测试,功能测试,系统测试等。众所周知,问题发现的越早,修正解决问题的代价就越低。静态分析就是一种在软件工程的前期,编码完成之后就能实施的有效手段。
[0003]静态分析的技术一般会包含:预处理模块、词法分析模块、语法分析模块、控制流分析模块和数据流分析模块,所用到这些模块的技术和编译技术存在很大的相似性。源文件进行编译时用到的参数,和静态分析时需要用到的参数信息,大部分是相同的。静态分析工具为了能够检查出更多的词法错误,语法语义的错误,就需要获得每个源文件的更多更详尽的编译参数,来构建词法/语法信息更完整的模型。
[0004]随着软件工程的规模越来越大,源文件也越来越多;而且每个源文件编译的时候会有不同的编译参数,导致工程越来越复杂。这种情况下,对源文件个数庞大且参数复杂的工程进行静态分析,就需要花费很大人力对每个源文件逐一进行信息提取,逐一进行静态分析。

【发明内容】

[0005]本发明要解决的技术问题是现有的软件工程源文件静态分析工作量巨大,需要花费很大人力对每个源文件逐一进行信息提取,逐一进行静态分析,分析过程复杂,对基于多种编译器的工程源文件无法实现自动化的静态分析。
[0006]为解决上述技术问题,本发明采用的技术方案是:一种基于Makefile自动编译技术实现的软件源文件静态分析方法,包括以下步骤:步骤一:调用Make工具对自动化编译所用的Makefile工程文件内容进行解析,获得待编译的源文件的编译命令行,截获该编译命令行,并暂停make的执行权;步骤二:将截获的编译命令行格式化,将编译命令行分离成编译命令和编译选项;通过编译命令进行编译器匹配;能匹配到编译器的,解析编译命令行,获取静态分析命令行;不能匹配到编译器的,跳转步骤四;步骤三:将执行权交给交给获取到的静态分析命令行,由静态分析命令行执行编译源文件的静态分析工作;静态分析完成后,将解析结果输出到log文件中,并将执行权限交还给Make ;步骤四:Make工具重新获得执行权限后,继续执行当前的编译命令行;步骤五:当Make工具获取到下一条编译命令行时,则跳转到步骤一;否则,跳转到步骤六;步骤六:将静态分析结果文件格式化成CSV格式;根据解析结果,将存在问题的解析项插入到对应源文件的对应位置;输出静态分析过程中存在问题的源文件列表。
[0007]现在软件行业大都使用Makefile来管理自己的工程,源文件信息和编译信息都记录在Makefile中,然后利用make命令工具,就能自动的进行编译。这种情况下,静态分析工具就可以通过对Makefile信息的解析,获取静态分析所需要的编译参数;make工具的执行过程是解析Makef ile,对管理的所有源文件按指定的顺序逐个进行编译,这个过程是自动进行的;静态分析工具也需要对每个源文件逐个进行分析,本发明方法通过采用Make工具和静态分析工具交叉获得执行权的方式,在make工具按顺序针对每一个源文件生成一条编译命令并逐条执行的同时,完成静态分析的工作。本方法把编译命令替换成静态分析命令,把不需要的参数去掉,同时添加静态分析需要的参数;然后由make逐条执行替换过的命令行,无需用户对静态编译工具进行额外的学习,只需执行一条简单的解析命令(LINUX平台)或鼠标一键操作(WINDOWS平台),即可完成代码的静态分析工作,大大提高了工作效率和静态分析工具的使用性。
[0008]
【具体实施方式】
[0009]本发明公开了一种基于Make命令,实现自动化调用PGRelief静态分析软件工程源文件的方法。本发明的方法所述处理方法包括:借助make命令对自动化编译所用的Makefile工程文件进行解析;生成每个源文件的编译命令;对生成的命令信息进行解析,生成当前文件所对应的静态分析命令;对当前文件进行静态分析,并保存解析结果;返回make命令处理,执行编译命令编译当前源文件。
[0010]
[0011]本发明支持WINDOWS和LINUX两个平台,能够对基于多种编译器的工程源文件进行自动化的静态分析,无需用户对静态编译工具进行额外的学习,只需执行一条简单的解析命令(LINUX平台)或鼠标一键操作(WINDOWS平台),即可完成代码的静态分析工作,大大提高了工作效率和静态分析工具的使用性。
[0012]本实施例采用Linux平台GCC编译器,并以32位Linux系统ppc-linux-gcc为例:
[0013]在C工程文件的根目录中,先执行自动化解析工具pgr_make.rb,初始化自动解析过程中需要的环境变量;
[0014]然后调用make 解析 Makefile ;
[0015]接着,从make中截获已解析的编译命令行生成pgr5_ppc_linux-gcc解析命令行;
[0016]接着,执行pgr5_ppc-linux-gcc命令行,生成针对于该编译命令行的pgr5静态分析命令行;
[0017]接着,执行生成的pgr5静态分析命令行;
[0018]接着,返回Make工具,完成编译命令行的执行,Make工具继续解析Makef ile并重复以上工作,直至对整个C工程的源文件完成静态分析处理。
[0019]在对整个C工程的源文件进行静态分析完成后,pgr_make.rb将解析结果格式化成CSV格式,方便用户查看,具体的处理流程是按如下步骤进行:
[0020]选定一个待解析的C工程文件,编译器为ppc-linux-gcc,进入到工程的根目录执\s pgr—make, rb ;
[0021]pgr_make.rb作为对整个工程静态分析的入口,在执行静态分析前,会初始化一系列环境变量,环境变量初始化完成后,开始执行静态分析工作,静态分析流程如下:
[0022]步骤1、调用Make工具解析Makefile,获取编译源文件的编译命令行;
[0023]在Make工具解析完一条待执行的编译命令行之后,在执行该条编译命令行之前,截获该条编译命令行,并执行compiIerContro1.rb中的自定义操作,操作完成后会将执行权交给Make工具,使之继续执行该条编译命令行;截取编译命令行的操作定义在Make工具的 job.c 中的 job_next_commandO 函数中。
[0024]步骤1.1、截取Make工具已解析的Makefile中的编译命令行。
[0025]步骤1.2、调用systemO函数,执行compiIerControI.rb,调用形式为system( “compilerControl.rb编译命令行”);调用systemO函数后,Make工具将执行权限交给 compilerControl.rb。
[0026]步骤2、解析编译命令行,获取PGRelief静态分析命令行。
[0027]步骤2.1、compilerControl.rb获得执行权限后,将截获的编译命令行进行格式化;格式化的目的主要是分离编译命令行的编译命令和编译选项。
[0028]步骤2.2、从格式化后的编译命令行中提取编译命令,进行编译器匹配。若匹配到ppc-linux-gcc编译器,则继续向下执行;若未匹配(该编译器不是ppc-linux-gcc或该条命令行不是编译命令行)则跳转到步骤4。
[0029]步骤2.3、根据匹配到的编译命令ppc-linux-gcc选择pgr_fake脚本文件。文件名为 pgr5_ppc-l inux-gcc
[0030]步骤2.4、使用pgr5_ppc-l inux-gcc替换原编译命令行中的编译命令ppc-
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1