日韩成人黄色,透逼一级毛片,狠狠躁天天躁中文字幕,久久久久久亚洲精品不卡,在线看国产美女毛片2019,黄片www.www,一级黄色毛a视频直播

一種基于Makefile自動編譯技術(shù)實(shí)現(xiàn)的軟件源文件靜態(tài)分析方法

文檔序號:9375328閱讀:430來源:國知局
一種基于Makefile自動編譯技術(shù)實(shí)現(xiàn)的軟件源文件靜態(tài)分析方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)領(lǐng)域,尤其涉及一種基于Makefile自動編譯方法的靜態(tài)分析自動化的方法。
【背景技術(shù)】
[0002]軟件開發(fā)中,為了保證軟件的質(zhì)量,一般會采取多種方式來進(jìn)行軟件品質(zhì)的確保:編譯器分析,靜態(tài)分析,單元測試,功能測試,系統(tǒng)測試等。眾所周知,問題發(fā)現(xiàn)的越早,修正解決問題的代價(jià)就越低。靜態(tài)分析就是一種在軟件工程的前期,編碼完成之后就能實(shí)施的有效手段。
[0003]靜態(tài)分析的技術(shù)一般會包含:預(yù)處理模塊、詞法分析模塊、語法分析模塊、控制流分析模塊和數(shù)據(jù)流分析模塊,所用到這些模塊的技術(shù)和編譯技術(shù)存在很大的相似性。源文件進(jìn)行編譯時(shí)用到的參數(shù),和靜態(tài)分析時(shí)需要用到的參數(shù)信息,大部分是相同的。靜態(tài)分析工具為了能夠檢查出更多的詞法錯誤,語法語義的錯誤,就需要獲得每個源文件的更多更詳盡的編譯參數(shù),來構(gòu)建詞法/語法信息更完整的模型。
[0004]隨著軟件工程的規(guī)模越來越大,源文件也越來越多;而且每個源文件編譯的時(shí)候會有不同的編譯參數(shù),導(dǎo)致工程越來越復(fù)雜。這種情況下,對源文件個數(shù)龐大且參數(shù)復(fù)雜的工程進(jìn)行靜態(tài)分析,就需要花費(fèi)很大人力對每個源文件逐一進(jìn)行信息提取,逐一進(jìn)行靜態(tài)分析。

【發(fā)明內(nèi)容】

[0005]本發(fā)明要解決的技術(shù)問題是現(xiàn)有的軟件工程源文件靜態(tài)分析工作量巨大,需要花費(fèi)很大人力對每個源文件逐一進(jìn)行信息提取,逐一進(jìn)行靜態(tài)分析,分析過程復(fù)雜,對基于多種編譯器的工程源文件無法實(shí)現(xiàn)自動化的靜態(tài)分析。
[0006]為解決上述技術(shù)問題,本發(fā)明采用的技術(shù)方案是:一種基于Makefile自動編譯技術(shù)實(shí)現(xiàn)的軟件源文件靜態(tài)分析方法,包括以下步驟:步驟一:調(diào)用Make工具對自動化編譯所用的Makefile工程文件內(nèi)容進(jìn)行解析,獲得待編譯的源文件的編譯命令行,截獲該編譯命令行,并暫停make的執(zhí)行權(quán);步驟二:將截獲的編譯命令行格式化,將編譯命令行分離成編譯命令和編譯選項(xiàng);通過編譯命令進(jìn)行編譯器匹配;能匹配到編譯器的,解析編譯命令行,獲取靜態(tài)分析命令行;不能匹配到編譯器的,跳轉(zhuǎn)步驟四;步驟三:將執(zhí)行權(quán)交給交給獲取到的靜態(tài)分析命令行,由靜態(tài)分析命令行執(zhí)行編譯源文件的靜態(tài)分析工作;靜態(tài)分析完成后,將解析結(jié)果輸出到log文件中,并將執(zhí)行權(quán)限交還給Make ;步驟四:Make工具重新獲得執(zhí)行權(quán)限后,繼續(xù)執(zhí)行當(dāng)前的編譯命令行;步驟五:當(dāng)Make工具獲取到下一條編譯命令行時(shí),則跳轉(zhuǎn)到步驟一;否則,跳轉(zhuǎn)到步驟六;步驟六:將靜態(tài)分析結(jié)果文件格式化成CSV格式;根據(jù)解析結(jié)果,將存在問題的解析項(xiàng)插入到對應(yīng)源文件的對應(yīng)位置;輸出靜態(tài)分析過程中存在問題的源文件列表。
[0007]現(xiàn)在軟件行業(yè)大都使用Makefile來管理自己的工程,源文件信息和編譯信息都記錄在Makefile中,然后利用make命令工具,就能自動的進(jìn)行編譯。這種情況下,靜態(tài)分析工具就可以通過對Makefile信息的解析,獲取靜態(tài)分析所需要的編譯參數(shù);make工具的執(zhí)行過程是解析Makef ile,對管理的所有源文件按指定的順序逐個進(jìn)行編譯,這個過程是自動進(jìn)行的;靜態(tài)分析工具也需要對每個源文件逐個進(jìn)行分析,本發(fā)明方法通過采用Make工具和靜態(tài)分析工具交叉獲得執(zhí)行權(quán)的方式,在make工具按順序針對每一個源文件生成一條編譯命令并逐條執(zhí)行的同時(shí),完成靜態(tài)分析的工作。本方法把編譯命令替換成靜態(tài)分析命令,把不需要的參數(shù)去掉,同時(shí)添加靜態(tài)分析需要的參數(shù);然后由make逐條執(zhí)行替換過的命令行,無需用戶對靜態(tài)編譯工具進(jìn)行額外的學(xué)習(xí),只需執(zhí)行一條簡單的解析命令(LINUX平臺)或鼠標(biāo)一鍵操作(WINDOWS平臺),即可完成代碼的靜態(tài)分析工作,大大提高了工作效率和靜態(tài)分析工具的使用性。
[0008]
【具體實(shí)施方式】
[0009]本發(fā)明公開了一種基于Make命令,實(shí)現(xiàn)自動化調(diào)用PGRelief靜態(tài)分析軟件工程源文件的方法。本發(fā)明的方法所述處理方法包括:借助make命令對自動化編譯所用的Makefile工程文件進(jìn)行解析;生成每個源文件的編譯命令;對生成的命令信息進(jìn)行解析,生成當(dāng)前文件所對應(yīng)的靜態(tài)分析命令;對當(dāng)前文件進(jìn)行靜態(tài)分析,并保存解析結(jié)果;返回make命令處理,執(zhí)行編譯命令編譯當(dāng)前源文件。
[0010]
[0011]本發(fā)明支持WINDOWS和LINUX兩個平臺,能夠?qū)诙喾N編譯器的工程源文件進(jìn)行自動化的靜態(tài)分析,無需用戶對靜態(tài)編譯工具進(jìn)行額外的學(xué)習(xí),只需執(zhí)行一條簡單的解析命令(LINUX平臺)或鼠標(biāo)一鍵操作(WINDOWS平臺),即可完成代碼的靜態(tài)分析工作,大大提高了工作效率和靜態(tài)分析工具的使用性。
[0012]本實(shí)施例采用Linux平臺GCC編譯器,并以32位Linux系統(tǒng)ppc-linux-gcc為例:
[0013]在C工程文件的根目錄中,先執(zhí)行自動化解析工具pgr_make.rb,初始化自動解析過程中需要的環(huán)境變量;
[0014]然后調(diào)用make 解析 Makefile ;
[0015]接著,從make中截獲已解析的編譯命令行生成pgr5_ppc_linux-gcc解析命令行;
[0016]接著,執(zhí)行pgr5_ppc-linux-gcc命令行,生成針對于該編譯命令行的pgr5靜態(tài)分析命令行;
[0017]接著,執(zhí)行生成的pgr5靜態(tài)分析命令行;
[0018]接著,返回Make工具,完成編譯命令行的執(zhí)行,Make工具繼續(xù)解析Makef ile并重復(fù)以上工作,直至對整個C工程的源文件完成靜態(tài)分析處理。
[0019]在對整個C工程的源文件進(jìn)行靜態(tài)分析完成后,pgr_make.rb將解析結(jié)果格式化成CSV格式,方便用戶查看,具體的處理流程是按如下步驟進(jìn)行:
[0020]選定一個待解析的C工程文件,編譯器為ppc-linux-gcc,進(jìn)入到工程的根目錄執(zhí)\s pgr—make, rb ;
[0021]pgr_make.rb作為對整個工程靜態(tài)分析的入口,在執(zhí)行靜態(tài)分析前,會初始化一系列環(huán)境變量,環(huán)境變量初始化完成后,開始執(zhí)行靜態(tài)分析工作,靜態(tài)分析流程如下:
[0022]步驟1、調(diào)用Make工具解析Makefile,獲取編譯源文件的編譯命令行;
[0023]在Make工具解析完一條待執(zhí)行的編譯命令行之后,在執(zhí)行該條編譯命令行之前,截獲該條編譯命令行,并執(zhí)行compiIerContro1.rb中的自定義操作,操作完成后會將執(zhí)行權(quán)交給Make工具,使之繼續(xù)執(zhí)行該條編譯命令行;截取編譯命令行的操作定義在Make工具的 job.c 中的 job_next_commandO 函數(shù)中。
[0024]步驟1.1、截取Make工具已解析的Makefile中的編譯命令行。
[0025]步驟1.2、調(diào)用systemO函數(shù),執(zhí)行compiIerControI.rb,調(diào)用形式為system( “compilerControl.rb編譯命令行”);調(diào)用systemO函數(shù)后,Make工具將執(zhí)行權(quán)限交給 compilerControl.rb。
[0026]步驟2、解析編譯命令行,獲取PGRelief靜態(tài)分析命令行。
[0027]步驟2.1、compilerControl.rb獲得執(zhí)行權(quán)限后,將截獲的編譯命令行進(jìn)行格式化;格式化的目的主要是分離編譯命令行的編譯命令和編譯選項(xiàng)。
[0028]步驟2.2、從格式化后的編譯命令行中提取編譯命令,進(jìn)行編譯器匹配。若匹配到ppc-linux-gcc編譯器,則繼續(xù)向下執(zhí)行;若未匹配(該編譯器不是ppc-linux-gcc或該條命令行不是編譯命令行)則跳轉(zhuǎn)到步驟4。
[0029]步驟2.3、根據(jù)匹配到的編譯命令ppc-linux-gcc選擇pgr_fake腳本文件。文件名為 pgr5_ppc-l inux-gcc
[0030]步驟2.4、使用pgr5_ppc-l inux-gcc替換原編譯命令行中的編譯命令ppc-
當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1