国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      無痕可管理的源代碼自動插樁方法

      文檔序號:6428643閱讀:973來源:國知局
      專利名稱:無痕可管理的源代碼自動插樁方法
      技術(shù)領(lǐng)域
      本發(fā)明涉及計算機程序動態(tài)分析,主要涉及一種無痕可管理的源代碼插樁方法。 該方法包括插樁點可視化、插樁點管理、插樁點定位、自動插樁框架、自動插樁性能優(yōu)化五個部分。
      背景技術(shù)
      程序分析通常利用靜態(tài)程序分析和動態(tài)程序分析對程序行為進行自動分析,進而提高軟件質(zhì)量。動態(tài)程序分析常借助于插樁方法來收集程序動態(tài)運行行為,某些與運行環(huán)境相關(guān)的程序行為只能通過插樁來收集,而靜態(tài)程序分析無法進行分析。軟件開發(fā)過程中, 代碼審查者在代碼編寫階段完成后使用源代碼插樁方法對代碼進行審查,通常審查者擁有閱讀源代碼權(quán)限但不便對代碼進行修改。通過對程序運行行為的分析盡早發(fā)現(xiàn)代碼中的錯誤,進而提高軟件質(zhì)量。源代碼插樁能夠充分地利用程序語義、可視化地顯示插樁代碼、并且不會提高代碼邏輯復雜性。程序插樁技術(shù),是在保證被測程序原有邏輯完整性的基礎(chǔ)上在程序中插入一些探針,通過探針的執(zhí)行并拋出程序運行的特征數(shù)據(jù),通過對這些數(shù)據(jù)的分析,可以獲得程序的控制流和數(shù)據(jù)流信息,進而得到邏輯覆蓋等動態(tài)信息,從而實現(xiàn)測試目的的方法。由于程序插樁技術(shù)是在被測程序中插入探針,然后通過探針的執(zhí)行來獲得程序的控制流和數(shù)據(jù)流信息,以此來實現(xiàn)測試的目的。因此,根據(jù)探針插入的時間可以分為目標代碼插樁和源代碼插樁?,F(xiàn)有插樁方法主要包括斷言機制、字節(jié)碼插樁、面向方面插樁等三類方法。斷言機制直接在寫源文件中添加插樁代碼,將會降低代碼閱讀性。字節(jié)碼插樁則直接對字節(jié)碼文件進行修改,被插字節(jié)碼的源代碼無法可視化,且無法保證代碼插入過程的正確性。面向方面插樁在程序縱向繼承關(guān)系的基礎(chǔ)上增加了橫向方面關(guān)系,增加了程序的邏輯復雜性。目前插樁技術(shù)主要存在插樁點及其代碼可視化、被插代碼管理、插樁點自動定位、 自動插樁性能較低的問題。

      發(fā)明內(nèi)容
      鑒于上述問題,本發(fā)明旨在提供一個源代碼插樁方法,該方法不僅支持手動插樁, 并且支持批量自動插樁。其主要特點有插樁代碼可視化、插入代碼集中管理、插樁過程無痕化、插樁點自動化定位、自動插樁可擴展性和自動插樁高效性。本發(fā)明是通過以下技術(shù)方案實現(xiàn)的一種無痕可管理的源代碼自動插樁方法,步驟包括步驟40 開始,打開一個工程;步驟41 定義一個文件過濾器,對所需插樁的工程進行匹配,保留匹配的工程;步驟42 接著使用所述文件過濾器對被插樁的源文件進行過濾;步驟43 選擇自動插樁的具體應用類型,定義相應類型所需插樁的代碼;
      步驟44 用語法樹結(jié)構(gòu)匹配,根據(jù)自動插樁的具體應用類型進行相應插樁點的位置定位,并在相應位置插入代碼,生成一個新源文件;步驟45 所述新源文件進行編譯產(chǎn)生新的可執(zhí)行字節(jié)碼文件,并保存;步驟46 生成可執(zhí)行文件,結(jié)束。本自動插樁方法提供了元插樁類型重用框架,包括元插樁操作組合器和元插樁類型池,其中,元插樁類型池包括多個元插樁類型,并且支持添加新的元插樁類型;元插樁操作組合器將多個元插樁類型組合到一起,通過遍歷一次語法樹完成在語法樹上多種類型的插樁操作;所述元插樁類型支持對不同類型插樁進行插樁,且每一個元插樁類型只能針對某一類型元插樁進行插樁。所述步驟41中,對所需插樁的工程進行匹配,包括匹配工程中的包、文件、和方法。所述步驟42中,所述源文件過濾的步驟包括步驟60 開始源文件過濾是對某一工作空間所有源文件進行過濾;步驟61 先判斷該工作空間是否包含其它工程,如沒有則跳轉(zhuǎn)到步驟64,若有則進入步驟62 ;步驟62 匹配工程名,如果匹配則進入步驟63,如果不匹配則返回步驟61繼續(xù)查看是否有下一個工程;步驟63 如果工程名匹配,說明該工程需要進行插樁,將其添加到插樁工程集合中,然后跳回至步驟61 ;步驟64 進行包的過濾,先判斷工程集合中的工程是否包含其它包(此處其它包的說明Java工程中包括多個package,逐個包進行過濾,看看還有沒有其它包沒有進行過濾。包是指java語言中package的概念),如沒有則跳轉(zhuǎn)到步驟67開始進行文件的過濾, 若有則進入步驟65 ;步驟65 匹配包名,若匹配則進入步驟66,若不匹配則回到步驟64繼續(xù)查看是否有下一個包;步驟66 匹配包名,若相匹配,說明該包需要進行插樁,將其添加到插樁包集合中,然后跳回至步驟64;步驟67 判斷包集合中的包是否包含其它源文件,如果沒有則跳轉(zhuǎn)到步驟6b,如果有則進入步驟68 ;步驟68 匹配源文件名,若匹配則進入步驟69對方法進行匹配,否則跳回至步驟 67 ;步驟69 匹配方法,若匹配則進入步驟6a,否則跳回至步驟67 ;步驟6a 將匹配的源文件添加到文件匹配集合;步驟6b 對工程中所有工程名、包名、文件名和方法名進行匹配后并完成對文件的過濾操作。所述步驟62中,匹配工程名,是將工程名與工程名正則表達式進行匹配;所述步驟65中,匹配包名,是將包名與包名正則表達式進行匹配;
      所述步驟66中,匹配包名,是將包名與包名正則表達式進行匹配;所述步驟68中,匹配源文件名,是將源文件名與源文件名正則表達式進行匹配;所述步驟69中,匹配方法,是將源文件中的方法的方法名與方法名正則表達式進行匹配。所述步驟44中,通過語法樹匹配可實現(xiàn)插樁定位,該部分使用visitor模式進行匹配,語法樹匹配并插入代碼的步驟包括步驟70 開始對源文件進行插樁是逐個文件進行操作的,然后根據(jù)不同插樁類型進行插樁;插樁類型包括方法、IF分支、Switch分支、While分支、Do-while分支和For 分支類型;步驟71 查看是否還有下一個源文件,如果沒有則進入步驟幾,結(jié)束;如果有則進入步驟72 ;步驟72 先把源文件編譯成語法樹,再以Visitor模式訪問各個節(jié)點,Visitor模型下幾種插樁類型的操作步驟如下步驟73 首先判斷語法樹是否有下一個節(jié)點;步驟74 根據(jù)所選插樁類型判斷是否包含方法類型,若包含并且該結(jié)點是方法體結(jié)點,則進入步驟75,否則跳轉(zhuǎn)到步驟76 ;步驟75 將事先由分析人員所定義的方法類型插樁代碼插入到抽象語法樹中的相應節(jié)點;步驟76 根據(jù)所選插樁類型判斷是否包含IF分支類型,若包含并且該結(jié)點是IF 分支結(jié)點,則進入步驟77,否則跳轉(zhuǎn)到步驟78 ;步驟77 將事先由分析人員所定義的IF分支類型插樁代碼插入到抽象語法樹中的相應節(jié)點;步驟78 根據(jù)所選插樁類型判斷是否包含Switch分支類型,若包含并且該結(jié)點是 Switch分支結(jié)點,則進入步驟79,否則跳轉(zhuǎn)到步驟7a ;步驟79 將事先由分析人員所定義的Switch分支類型插樁代碼插入到抽象語法樹中的相應節(jié)點;步驟7a 根據(jù)所選插樁類型判斷是否包含While分支類型,若包含并且該結(jié)點是 While分支結(jié)點,則進入步驟7b,否則跳轉(zhuǎn)到步驟7a ;步驟7b 將事先由分析人員所定義的While分支類型插樁代碼插入到抽象語法樹中的相應節(jié)點;步驟7c 根據(jù)所選插樁類型判斷是否包含Do-While分支類型,若包含并且該結(jié)點是Do-Whi Ie分支結(jié)點,則進入步驟7d,否則跳轉(zhuǎn)到步驟7a ;步驟7d 將事先由分析人員所定義的Do-While分支類型插樁代碼插入到抽象語法樹中的相應節(jié)點;步驟7e:根據(jù)所選插樁類型判斷是否包含分支類型,若包含并且該結(jié)點是分支結(jié)點,則進入步驟7f,否則跳轉(zhuǎn)到步驟7a ;步驟7f 將事先由分析人員所定義的For分支類型插樁代碼插入到抽象語法樹中的相應節(jié)點;步驟7g 完成語法樹插樁后,將語法樹轉(zhuǎn)換成源代碼文件,然后進入步驟73對下一個源文件進行插樁;步驟幾完成了對所有文件的插樁插樁,整個過程結(jié)束。本發(fā)明的自動插樁方案是針對某具體應用類型進行的,利用抽象語法樹的結(jié)構(gòu)匹配進行插樁點自動定位,插樁點自動定位是自動插樁部分的重點。定位后將代碼片段的語法樹添加到原文件的語法樹中的相應位置,然后將產(chǎn)生的新語法樹并將其轉(zhuǎn)換成源代碼, 最后將新文件編譯成字節(jié)碼文件,所得字節(jié)碼文件可直接運行。整個自動插樁過程是逐個文件進行的。首先將原文件和插樁代碼編譯成語法樹, 接著遍歷每個文件的語法樹查看是否具有與插樁類型相匹配的語法樹結(jié)構(gòu)。找到匹配的語法樹結(jié)點后,將對應插樁類型代碼的語法樹合并到原文件的語法樹上。語法樹結(jié)構(gòu)匹配使用了 Visitor設計模式,利用該設計模式逐結(jié)點地遍歷整個語法樹,進而實現(xiàn)了樹形結(jié)構(gòu)的匹配。為提高自動插樁的效率,本發(fā)明為自動插樁提供了文件過濾方法和元插樁類型重用框架。利用文件過濾方法可以對所需編譯的文件進行過濾,降低所需編譯文件數(shù)量。程序分析時只需對整個工作空間(或工程)中的部分代碼進行分析,分析員對工作空間(或工程)的結(jié)構(gòu)已有所了解,利用分析員已有知識對自動插樁過程進行優(yōu)化。分析者定義一些正則表達式進而對文件進行過濾,與之相匹配的文件(工程或包)將被保留下來。通過上述方案,所需編譯文件數(shù)目將大大減小。進一步的,在自動插樁中,若每種元插樁類型的插樁過程都需遍歷一遍語法樹,則使用多個元插樁類型進行插樁時開銷將很大。整個過程開銷主要體現(xiàn)在對原文件的編譯, 將文件編譯成語法樹其時間代價大,本發(fā)明提供元插樁類型重用框架以便解決該問題。元插樁類型重用框架主要包含元插樁類型池、元插樁操作組合器,其中元插樁類型池包含多個元插樁類型。每種元插樁類型都是針對某一具體類型進行的并對插樁點的結(jié)構(gòu)匹配進行定義,但元插樁類型并不能直接對語法樹進行操作,需結(jié)合元插樁操作組合器進行使用。元插樁操作組合器將對文件的語法樹進行遍歷,根據(jù)元插樁類型所定義結(jié)構(gòu)對語法樹進行修改。元插樁類型池支持定義并添加新的插樁類型,進而實現(xiàn)對不同應用類型自動插樁的擴展。本發(fā)明利用標志保存插樁代碼,并將插樁代碼與原有代碼區(qū)分開來,提高了插樁代碼可視化能力。標志可以在插樁位置顯示相應的插樁代碼,且不會干擾原文件編輯工作。 同時可以集中管理所有插樁標志,進而提高插樁代碼的管理能力。本發(fā)明還利用語法樹結(jié)構(gòu)匹配進而實現(xiàn)插樁點的自動定位,自動定位能有效地實現(xiàn)自動插樁功能。在抽象語法樹上,自動插樁在所得定位位置添加插樁代碼,然后將新的語法樹轉(zhuǎn)換成源文件。為提高自動插樁的效率,本發(fā)明還設計了文件過濾和元插樁類型重用框架。以上所有操作均在后臺完成且不修改用戶原文件,整個過程是一個無痕過程。附圖內(nèi)容

      圖1為自動插樁的完整的流程圖。圖2為自動插樁的元插樁類型重用框架圖。圖3為自動插樁中文件過濾的流程圖。圖4為自動插樁中,語法樹匹配并插入代碼的流程圖。
      具體實施例方式下面通過附圖對本發(fā)明的技術(shù)方案做進一步的詳細描述。一種無痕可管理的源代碼自動插樁方法,本方法是針對某具體應用類型進行的, 利用抽象語法樹的結(jié)構(gòu)匹配進行插樁點的自動定位,插樁點自動定位自動插樁部分的重點。定位后將代碼片段的語法樹結(jié)構(gòu)添加到原文件的語法樹結(jié)構(gòu)中的相應位置,將產(chǎn)生的新語法樹轉(zhuǎn)換成源代碼并編譯成字節(jié)碼,所得字節(jié)碼可以直接進行運行。自動插樁的完整的流程圖如圖1所示,包括如下步驟步驟40 整個自動插樁過程的開始,此時打開一個工程并準備通過插樁對其進行分析;步驟41 定義一個文件過濾器,文件過濾器使用正則表達式對所需插樁的工程 (包、文件、方法)進行匹配,與之匹配的則將保留下來;步驟42 接著使用上述定義的過濾器對被插樁的文件進行過濾,利用分析者對工程文件已有知識提高了自動插樁性能;步驟43 選擇所需插樁的類型,定義相關(guān)類型所需插樁的代碼;步驟44 接著利用語法樹結(jié)構(gòu)匹配根據(jù)不同的插樁類型進行插樁點的位置定位, 并在相應位置插入代碼最終產(chǎn)生一個新的文件;步驟45 對上述新的文件進行編譯產(chǎn)生新的可執(zhí)行字節(jié)碼文件,并將這些文件保存起來;步驟46 最終產(chǎn)生可執(zhí)行文件,整個過程將不會修改原有文件信息,整個過程是一個無痕的過程。自動插樁方案中為提高插樁效率提供了文件過濾方案和元插樁類型重用框架。自動插樁的元插樁類型重用框架圖如圖2所示,該框架主要是由元插樁操作組合器和元插樁類型池兩部分組成。其中元插樁類型支持對不同類型插樁進行插樁,且每一個元插樁只能針對某一類型進行插樁。元插樁類型池包含多個元插樁類型,并且支持添加新的元插樁類型。元插樁操作組合器用于將多個元插樁類型組合到一起,通過遍歷一次語法樹進而完成在語法樹上多種類型的插樁操作。文件過濾方案通過減小插樁文件集合,降低被編譯文件數(shù)目。插樁過程中并非每個文件都需要進行插樁,編譯一些無關(guān)文件并將語法樹遍歷一遍將會浪費大量時間。通過文件過濾將大大降低插樁文件集大小,自動插樁文件過濾的流程圖如圖3所示,包括如下步驟步驟60 自動插樁文件過濾是對某一工作空間所有文件進行過濾;步驟61 先看該工作空間是否包含其它工程,如沒有則跳轉(zhuǎn)到步驟64開始進行包的過濾,若有則進入下一步;步驟62 將工程名與工程名正則表達式進行匹配,若匹配則進入下一步驟,若不匹配則回到步驟61繼續(xù)查看是否有下一個工程;步驟63 該工程名與正則表達式相匹配,說明該工程需要進行插樁,將其添加到插樁工程集合中,然后跳回至步驟61 ;步驟64 先看工程集合中的工程是否包含其它包,如沒有則跳轉(zhuǎn)到步驟67開始進行文件的過濾,若有則進入下一步;步驟65 將包名與包名正則表達式進行匹配,若匹配則進入下一步驟,若不匹配則回到步驟64繼續(xù)查看是否有下一個包;步驟66 該包名與正則表達式相匹配,說明該包需要進行插樁,將其添加到插樁包集合中,然后跳回至步驟64;步驟67 先看包集合中的包是否包含其它文件,如果沒有則跳轉(zhuǎn)到步驟6b,如果有則進入下一步;步驟68 將文件名與文件名正則表達式進行匹配,若匹配則進入下一步對方法名進行匹配,否則跳回至步驟67 ;步驟69 查看文件中是否包含與方法名正則表達式相匹配的方法,若匹配則進入下一步,否則跳回至步驟67;步驟6a 將匹配的文件添加到文件匹配集合;步驟6b 對工程中所有工程名、包名、文件名以及方法名進行匹配后并完成對文件的過濾操作。通過語法樹匹配可實現(xiàn)插樁定位,該部分使用設計模式中的visitor模式進行匹配,語法樹匹配并插入代碼的流程圖如圖4所示,包括如下步驟步驟70 對文件進行插樁是逐個文件進行操作的,然后根據(jù)不同插樁類型進行插樁,下面流程包含對方法、IF分支、Switch分支、While分支、Do-while分支以及For分支類型進行語法樹結(jié)構(gòu)匹配并進行插樁。步驟71 查看是否還有下一個文件,如果沒有則結(jié)束,否則進入下一步驟;步驟72 將文件編譯成語法樹,以便后面的插樁定位使用,下面將以Visitor模式訪問各個節(jié)點,下面幾個步驟描述了 visitor模型下幾種插樁類型的操作;步驟73 首先判斷語法樹是否有下一個節(jié)點;步驟74 根據(jù)所選插樁類型判斷是否包含方法類型,若包含并且該結(jié)點是方法體結(jié)點,則跳轉(zhuǎn)到下一步,否則跳轉(zhuǎn)到步驟76 ;步驟75 將事先由分析人員所定義的方法類型插樁代碼插入到抽象語法樹中;步驟76 根據(jù)所選插樁類型判斷是否包含IF分支類型,若包含并且該結(jié)點是IF 分支結(jié)點,則跳轉(zhuǎn)到下一步,否則跳轉(zhuǎn)到步驟78 ;步驟77 將事先由分析人員所定義的IF分支類型插樁代碼插入到抽象語法樹中;步驟78 根據(jù)所選插樁類型判斷是否包含Switch分支類型,若包含并且該結(jié)點是 Switch分支結(jié)點,則跳轉(zhuǎn)到下一步,否則跳轉(zhuǎn)到步驟7a ;步驟79 將事先由分析人員所定義的Switch分支類型插樁代碼插入到抽象語法樹中;步驟7a 根據(jù)所選插樁類型判斷是否包含While分支類型,若包含并且該結(jié)點是 While分支結(jié)點,則跳轉(zhuǎn)到下一步,否則跳轉(zhuǎn)到步驟7a ;步驟7b 將事先由分析人員所定義的While分支類型插樁代碼插入到抽象語法樹中;步驟7c 根據(jù)所選插樁類型判斷是否包含Do-While分支類型,若包含并且該結(jié)點是Do-While分支結(jié)點,則跳轉(zhuǎn)到下一步,否則跳轉(zhuǎn)到步驟7a ;步驟7d 將事先由分析人員所定義的Do-While分支類型插樁代碼插入到抽象語法樹中;步驟7e:根據(jù)所選插樁類型判斷是否包含分支類型,若包含并且該結(jié)點是分支結(jié)點,則跳轉(zhuǎn)到下一步,否則跳轉(zhuǎn)到步驟7a ;步驟7f 將事先由分析人員所定義的For分支類型插樁代碼插入到抽象語法樹中;步驟7g 完成語法樹插樁后,將語法樹轉(zhuǎn)換成源代碼文件,然后進入下一步對下一個文件進行插樁;步驟幾完成了對所有文件的插樁插樁,整個過程結(jié)束;最后對所產(chǎn)生的新文件進行編譯,生成包含原文件和插樁代碼的字節(jié)碼文件,運行這些文件便可獲得插樁后文件運行結(jié)果。本發(fā)明的技術(shù)方案利用標志編輯并保存插樁代碼,插樁標志能夠?qū)⒉鍢洞a與原代碼區(qū)分開,同時能在插樁位置顯示插樁代碼,能夠有效地提高程序的可閱讀性。插樁標志不影響對源程序的編輯工作,此外插樁點的集中管理提高了插樁標志的易用性。本發(fā)明使用語法樹結(jié)構(gòu)匹配提高了定位精度,將原源代碼文件編譯成語法樹后進行結(jié)構(gòu)匹配,對語法樹進行修改最后將語法樹轉(zhuǎn)換成源代碼文件。另外,為提高匹配效率,方案還提出了文件過濾方法和元插樁類型重用框架。文件過濾方法有效地降低了所需編譯和遍歷的文件數(shù)目,元插樁類型重用框架使得多種插樁類型能在一次語法樹遍歷中完成。最后應當說明的是以上步驟僅用于說明本發(fā)明的技術(shù)方案而非對其限制。盡管上述步驟對本發(fā)明進行了詳細的說明,相關(guān)領(lǐng)域的技術(shù)人員應當理解,依然可以對本發(fā)明的具體技術(shù)進行修改或者對部分技術(shù)進行等同替換;而不脫離本發(fā)明技術(shù)方案的精神,其均應涵蓋在本發(fā)明請求保護的技術(shù)方案范圍當中。
      權(quán)利要求
      1.一種無痕可管理的源代碼自動插樁方法,其特征是步驟包括 步驟40:開始,打開一個工程;步驟41 定義一個文件過濾器,對所需插樁的工程進行匹配,保留匹配的工程; 步驟42 接著使用所述文件過濾器對被插樁的源文件進行過濾; 步驟43 選擇自動插樁的具體應用類型,定義相應類型所需插樁的代碼; 步驟44:用語法樹結(jié)構(gòu)匹配,根據(jù)自動插樁的具體應用類型進行相應插樁點的位置定位,并在相應位置插入代碼,生成一個新源文件;步驟45 所述新源文件進行編譯產(chǎn)生新的可執(zhí)行字節(jié)碼文件,并保存; 步驟46 生成可執(zhí)行文件,結(jié)束。
      2.根據(jù)權(quán)利要求1所述的無痕可管理的源代碼自動插樁方法,其特征是本自動插樁方法提供了元插樁類型重用框架,包括元插樁操作組合器和元插樁類型池,其中,元插樁類型池包括多個元插樁類型,并且支持添加新的元插樁類型; 元插樁操作組合器將多個元插樁類型組合到一起,通過遍歷一次語法樹完成在語法樹上多種類型的插樁操作;所述元插樁類型支持對不同類型插樁進行插樁,且每一個元插樁類型只能針對某一類型元插樁進行插樁。
      3.根據(jù)權(quán)利要求1所述的無痕可管理的源代碼自動插樁方法,其特征是所述步驟41 中,對所需插樁的工程進行匹配,包括匹配工程中的包、文件、和方法。
      4.根據(jù)權(quán)利要求3所述的無痕可管理的源代碼自動插樁方法,其特征是所述步驟42 中,所述源文件過濾的步驟包括步驟60 開始源文件過濾是對某一工作空間所有源文件進行過濾; 步驟61 先判斷該工作空間是否包含其它工程,如沒有則跳轉(zhuǎn)到步驟64,若有則進入步驟62 ;步驟62 匹配工程名,如果匹配則進入步驟63,如果不匹配則返回步驟61繼續(xù)查看是否有下一個工程;步驟63:如果工程名匹配,說明該工程需要進行插樁,將其添加到插樁工程集合中,然后跳回至步驟61 ;步驟64:進行包的過濾,先判斷工程集合中的工程是否包含其它包,如沒有則跳轉(zhuǎn)到步驟67開始進行文件的過濾,若有則進入步驟65 ;步驟65 匹配包名,若匹配則進入步驟66,若不匹配則回到步驟64繼續(xù)查看是否有下一個包;步驟66 匹配包名,若相匹配,說明該包需要進行插樁,將其添加到插樁包集合中,然后跳回至步驟64;步驟67 判斷包集合中的包是否包含其它源文件,如果沒有則跳轉(zhuǎn)到步驟6b,如果有則進入步驟68 ;步驟68 匹配源文件名,若匹配則進入步驟69對方法進行匹配,否則跳回至步驟67 ; 步驟69 匹配方法,若匹配則進入步驟6a,否則跳回至步驟67 ; 步驟6a 將匹配的源文件添加到文件匹配集合;步驟6b 對工程中所有工程名、包名、文件名和方法名進行匹配后并完成對文件的過濾操作。
      5.根據(jù)權(quán)利要求4所述的無痕可管理的源代碼自動插樁方法,其特征是所述步驟62中,匹配工程名,是將工程名與工程名正則表達式進行匹配; 所述步驟65中,匹配包名,是將包名與包名正則表達式進行匹配;所述步驟66中,匹配包名,是將包名與包名正則表達式進行匹配; 所述步驟68中,匹配源文件名,是將源文件名與源文件名正則表達式進行匹配; 所述步驟69中,匹配方法,是將源文件中的方法的方法名與方法名正則表達式進行匹配。
      6.根據(jù)權(quán)利要求1所述的無痕可管理的源代碼自動插樁方法,其特征是所述步驟44 中,通過語法樹匹配可實現(xiàn)插樁定位,該部分使用visitor模式進行匹配,語法樹匹配并插入代碼的步驟包括步驟70 開始對源文件進行插樁是逐個文件進行操作的,然后根據(jù)不同插樁類型進行插樁;插樁類型包括方法、IF分支、Switch分支、While分支、Do-while分支和For分支類型;步驟71 查看是否還有下一個源文件,如果沒有則進入步驟幾,結(jié)束;如果有則進入步驟72 ;步驟72 先把源文件編譯成語法樹,再以Visitor模式訪問各個節(jié)點,Visitor模型下幾種插樁類型的操作步驟如下步驟73 首先判斷語法樹是否有下一個節(jié)點;步驟74:根據(jù)所選插樁類型判斷是否包含方法類型,若包含并且該結(jié)點是方法體結(jié)點,則進入步驟75,否則跳轉(zhuǎn)到步驟76 ;步驟75 將事先由分析人員所定義的方法類型插樁代碼插入到抽象語法樹中的相應節(jié)占.I— /、、、 步驟76 根據(jù)所選插樁類型判斷是否包含IF分支類型,若包含并且該結(jié)點是IF分支結(jié)點,則進入步驟77,否則跳轉(zhuǎn)到步驟78 ;步驟77 將事先由分析人員所定義的IF分支類型插樁代碼插入到抽象語法樹中的相應節(jié)點;步驟78 根據(jù)所選插樁類型判斷是否包含Switch分支類型,若包含并且該結(jié)點是 Switch分支結(jié)點,則進入步驟79,否則跳轉(zhuǎn)到步驟7a ;步驟79 將事先由分析人員所定義的Switch分支類型插樁代碼插入到抽象語法樹中的相應節(jié)點;步驟7a:根據(jù)所選插樁類型判斷是否包含Whi Ie分支類型,若包含并且該結(jié)點是 While分支結(jié)點,則進入步驟7b,否則跳轉(zhuǎn)到步驟7a ;步驟7b 將事先由分析人員所定義的While分支類型插樁代碼插入到抽象語法樹中的相應節(jié)點;步驟7c 根據(jù)所選插樁類型判斷是否包含Do-While分支類型,若包含并且該結(jié)點是 Do-While分支結(jié)點,則進入步驟7d,否則跳轉(zhuǎn)到步驟7a ;步驟7d 將事先由分析人員所定義的Do-While分支類型插樁代碼插入到抽象語法樹中的相應節(jié)點;步驟7e 根據(jù)所選插樁類型判斷是否包含F(xiàn)or分支類型,若包含并且該結(jié)點是For分支結(jié)點,則進入步驟7f,否則跳轉(zhuǎn)到步驟7a ;步驟7f 將事先由分析人員所定義的For分支類型插樁代碼插入到抽象語法樹中的相應節(jié)點;步驟7g 完成語法樹插樁后,將語法樹轉(zhuǎn)換成源代碼文件,然后進入步驟73對下一個源文件進行插樁;步驟幾完成了對所有文件的插樁插樁,整個過程結(jié)束。
      全文摘要
      一種無痕可管理的源代碼自動插樁方法,步驟包括40開始,打開一個工程;41定義一個文件過濾器,對所需插樁的工程進行匹配,保留匹配的工程;42接著使用所述文件過濾器對被插樁的源文件進行過濾;43選擇自動插樁的具體應用類型,定義相應類型所需插樁的代碼;44用語法樹結(jié)構(gòu)匹配,根據(jù)自動插樁的具體應用類型進行相應插樁點的位置定位,并在相應位置插入代碼,生成一個新源文件;45所述新源文件進行編譯產(chǎn)生新的可執(zhí)行字節(jié)碼文件,并保存;46生成可執(zhí)行文件,結(jié)束。本方法主要特點為插樁代碼可視化、集中管理插入代碼、插樁過程無痕化、插樁點自動化定位、自動插樁可擴展、自動插樁高效性。
      文檔編號G06F9/44GK102231109SQ20111019858
      公開日2011年11月2日 申請日期2011年7月15日 優(yōu)先權(quán)日2011年7月15日
      發(fā)明者張?zhí)? 陳華杰 申請人:南京大學
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1