国产精品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>

      代碼檢測(cè)方法及裝置的制造方法

      文檔序號(hào):9708211閱讀:370來(lái)源:國(guó)知局
      代碼檢測(cè)方法及裝置的制造方法
      【專利說(shuō)明】
      【技術(shù)領(lǐng)域】
      [0001]本申請(qǐng)涉及計(jì)算機(jī)技術(shù)領(lǐng)域,尤其涉及一種代碼檢測(cè)方法及裝置。
      【【背景技術(shù)】】
      [0002]代碼是指程序員利用開發(fā)工具所支持的語(yǔ)言編寫出來(lái)的源文件,是一組由字符、符號(hào)或信號(hào)碼元等以離散形式表示信息的明確的規(guī)則體系。隨著編程技術(shù)的發(fā)展,大多數(shù)功能都可以通過(guò)代碼實(shí)現(xiàn)。在具體實(shí)現(xiàn)上,代碼會(huì)包括一些函數(shù),并通過(guò)函數(shù)之間的相互調(diào)用完成所要實(shí)現(xiàn)的功能。
      [0003]在實(shí)際應(yīng)用中,為確保代碼的穩(wěn)定性和可用性等,在開發(fā)出代碼之后,通常還需要對(duì)其進(jìn)行各種檢測(cè),如靜態(tài)代碼檢測(cè)?,F(xiàn)有技術(shù)存在以代碼中的函數(shù)為對(duì)象,驗(yàn)證每個(gè)函數(shù)是否存在循環(huán)調(diào)用語(yǔ)句的靜態(tài)檢測(cè)方法。例如,該方法會(huì)檢測(cè)函數(shù)中是否存在類似while (true)這樣的初始化死循環(huán)語(yǔ)句,或者檢測(cè)是否存在類似for (;;)這樣的無(wú)限循環(huán)語(yǔ)句等,來(lái)判斷函數(shù)是否存在錯(cuò)誤。
      [0004]由于現(xiàn)有這種代碼檢測(cè)方法僅局限于代碼包含的函數(shù)內(nèi),因此無(wú)法從整體角度對(duì)代碼進(jìn)行檢測(cè),檢測(cè)準(zhǔn)確度較低。

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

      [0005]本申請(qǐng)的多個(gè)方面提供一種代碼檢測(cè)方法及裝置,用以從整體對(duì)代碼進(jìn)行檢測(cè),提高代碼檢測(cè)的準(zhǔn)確度。
      [0006]本申請(qǐng)的一方面,提供一種代碼檢測(cè)方法,包括:
      [0007]對(duì)待檢測(cè)代碼進(jìn)行動(dòng)態(tài)分析,以獲得第一函數(shù)調(diào)用圖,所述第一函數(shù)調(diào)用圖中的節(jié)點(diǎn)表示所述待檢測(cè)代碼包含的函數(shù),所述第一函數(shù)調(diào)用圖中的有向邊表示所述有向邊連接的兩個(gè)節(jié)點(diǎn)所表示的函數(shù)之間的調(diào)用關(guān)系;
      [0008]根據(jù)所述第一函數(shù)調(diào)用圖,檢測(cè)所述待檢測(cè)代碼中是否存在調(diào)用環(huán)路。
      [0009]本申請(qǐng)的另一方面,提供一種代碼檢測(cè)裝置,包括:
      [0010]分析模塊,用于對(duì)待檢測(cè)代碼進(jìn)行動(dòng)態(tài)分析,以獲得第一函數(shù)調(diào)用圖,所述第一函數(shù)調(diào)用圖中的節(jié)點(diǎn)表示所述待檢測(cè)代碼包含的函數(shù),所述第一函數(shù)調(diào)用圖中的有向邊表示所述有向邊連接的兩個(gè)節(jié)點(diǎn)所表示的函數(shù)之間的調(diào)用關(guān)系;
      [0011]檢測(cè)模塊,用于根據(jù)所述第一函數(shù)調(diào)用圖,檢測(cè)所述待檢測(cè)代碼中是否存在的調(diào)用環(huán)路。
      [0012]在本申請(qǐng)中,通過(guò)對(duì)代碼進(jìn)行動(dòng)態(tài)分析,獲得可以表示代碼包含的函數(shù)以及函數(shù)之間調(diào)用關(guān)系的第一函數(shù)調(diào)用圖,根據(jù)第一函數(shù)調(diào)用圖,檢測(cè)代碼中是否存在調(diào)用環(huán)路。與現(xiàn)有函數(shù)內(nèi)這種局部檢測(cè)方式相比,本申請(qǐng)是從全局角度發(fā)現(xiàn)代碼包含的函數(shù)之間是否存在調(diào)用環(huán)路,而不再局限于函數(shù)內(nèi)的檢測(cè),函數(shù)之間的調(diào)用環(huán)路可能導(dǎo)致代碼在運(yùn)行時(shí)出現(xiàn)死循環(huán),會(huì)嚴(yán)重影響代碼的整體性能,因此本申請(qǐng)通過(guò)檢測(cè)代碼中是否存在調(diào)用環(huán)路達(dá)到檢測(cè)代碼的目的,可以極大的提高代碼檢測(cè)的準(zhǔn)確度。【【附圖說(shuō)明】】
      [0013]為了更清楚地說(shuō)明本申請(qǐng)實(shí)施例中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作一簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖是本申請(qǐng)的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
      [0014]圖1為本申請(qǐng)一實(shí)施例提供的代碼檢測(cè)方法的流程示意圖;
      [0015]圖2為本申請(qǐng)一實(shí)施例提供的第一函數(shù)調(diào)用圖的結(jié)構(gòu)示意圖;
      [0016]圖3為本申請(qǐng)一實(shí)施例提供的步驟101的一種實(shí)施方式的流程示意圖;
      [0017]圖4為本申請(qǐng)一實(shí)施例提供的第二函數(shù)調(diào)用圖的結(jié)構(gòu)示意圖;
      [0018]圖5為本申請(qǐng)另一實(shí)施例提供的第一函數(shù)調(diào)用圖的結(jié)構(gòu)示意圖;
      [0019]圖6為本申請(qǐng)一實(shí)施例提供的步驟102的一種實(shí)施方式的流程示意圖;
      [0020]圖7為本申請(qǐng)一實(shí)施例提供的第三函數(shù)調(diào)用圖的結(jié)構(gòu)示意圖;
      [0021]圖8為本申請(qǐng)一實(shí)施例提供的代碼檢測(cè)裝置的結(jié)構(gòu)示意圖。
      【【具體實(shí)施方式】】
      [0022]為使本申請(qǐng)實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本申請(qǐng)實(shí)施例中的附圖,對(duì)本申請(qǐng)實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是本申請(qǐng)一部分實(shí)施例,而不是全部的實(shí)施例?;诒旧暾?qǐng)中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本申請(qǐng)保護(hù)的范圍。
      [0023]圖1為本申請(qǐng)一實(shí)施例提供的代碼檢測(cè)方法的流程示意圖。如圖1所示,該方法包括:
      [0024]101、對(duì)待檢測(cè)代碼進(jìn)行動(dòng)態(tài)分析,以獲得第一函數(shù)調(diào)用圖,其中,第一函數(shù)調(diào)用圖中的節(jié)點(diǎn)表示待檢測(cè)代碼包含的函數(shù),第一函數(shù)調(diào)用圖中的有向邊表示該有向邊連接的兩個(gè)節(jié)點(diǎn)所表示的函數(shù)之間的調(diào)用關(guān)系。
      [0025]102、根據(jù)上述第一函數(shù)調(diào)用圖,檢測(cè)待檢測(cè)代碼中是否存在調(diào)用環(huán)路。
      [0026]本實(shí)施例的執(zhí)行主體可以是代碼檢測(cè)裝置,該裝置可以是任何具有一定處理能力的設(shè)備,例如可以是用戶終端、服務(wù)器或者代碼檢測(cè)專用設(shè)備等。
      [0027]本實(shí)施例中待檢測(cè)代碼可以是使用任何編程語(yǔ)言編寫的代碼,也可以是實(shí)現(xiàn)任何功能的代碼。編程語(yǔ)目可以是java、C、C++等。
      [0028]對(duì)有些代碼而言,通過(guò)靜態(tài)分析無(wú)法準(zhǔn)確獲取這些代碼所包含的函數(shù)之間的調(diào)用關(guān)系。例如,對(duì)于使用spring(它是一個(gè)輕量級(jí)的J2EE框架,關(guān)于spring具體可參見(jiàn)現(xiàn)有技術(shù))進(jìn)行接口編程、切面編程的代碼,靜態(tài)分析無(wú)法準(zhǔn)確得到函數(shù)之間的調(diào)用關(guān)系。又例如,對(duì)于在運(yùn)行時(shí)存在類型識(shí)別的代碼來(lái)說(shuō),靜態(tài)分析也無(wú)法準(zhǔn)確獲得函數(shù)之間的調(diào)用關(guān)系。例如,在運(yùn)行時(shí)存在類型識(shí)別的代碼可以是使用了 C語(yǔ)言的Void*(Void是C語(yǔ)言中的一個(gè)類型,void*可指向任何數(shù)據(jù)類型,這會(huì)妨礙靜態(tài)分析的準(zhǔn)確性)、C++語(yǔ)言的通過(guò)運(yùn)行時(shí)類型信息(Run-Time Type Informat1n, RTTI)或者java語(yǔ)言中的基類等的代碼。
      [0029]舉例說(shuō)明,假設(shè)一種采用接口編程的代碼包括:接口函數(shù)Al、Bl、C1和D1,以及各個(gè)接口函數(shù)對(duì)應(yīng)的接口實(shí)體函數(shù)A2、B2、C2和D2 ;則通過(guò)靜態(tài)分析可以得到代碼包含的函數(shù)之間的調(diào)用關(guān)系,包括接口實(shí)體函數(shù)A2調(diào)用接口函數(shù)B1,接口實(shí)體函數(shù)B2調(diào)用接口函數(shù)C1、接口實(shí)體函數(shù)C2調(diào)用接口函數(shù)D1,接口實(shí)體函數(shù)D2調(diào)用接口函數(shù)A1。但在實(shí)際運(yùn)行中,當(dāng)運(yùn)行到一個(gè)接口實(shí)體函數(shù)調(diào)用另一接口函數(shù)時(shí),該接口實(shí)體函數(shù)會(huì)自動(dòng)調(diào)用另一接口函數(shù)對(duì)應(yīng)的接口實(shí)體函數(shù),即該代碼實(shí)際上還包含以下函數(shù)調(diào)用關(guān)系:接口實(shí)體函數(shù)A2調(diào)用接口實(shí)體函數(shù)B2,接口實(shí)體函數(shù)B2調(diào)用接口實(shí)體函數(shù)C2、接口實(shí)體函數(shù)C2調(diào)用接口實(shí)體函數(shù)D2,接口實(shí)體函數(shù)D2調(diào)用接口實(shí)體函數(shù)A2,這些函數(shù)調(diào)用關(guān)系無(wú)法通過(guò)靜態(tài)分析獲得。
      [0030]基于上述,本實(shí)施例在檢測(cè)代碼過(guò)程中,代碼檢測(cè)裝置對(duì)代碼進(jìn)行動(dòng)態(tài)分析,以獲得可以表示代碼包含的函數(shù)和函數(shù)之間的調(diào)用關(guān)系的函數(shù)調(diào)用圖。為便于區(qū)分和描述,將這里的函數(shù)調(diào)用圖稱為第一函數(shù)調(diào)用圖,這里的“第一”既不是個(gè)數(shù)的限定,也不是先后順序的限定。
      [0031]其中,第一函數(shù)調(diào)用圖包括節(jié)點(diǎn)和有向邊,第一函數(shù)調(diào)用圖中的節(jié)點(diǎn)表示待檢測(cè)代碼包含的函數(shù),即一個(gè)節(jié)點(diǎn)對(duì)應(yīng)一個(gè)函數(shù),節(jié)點(diǎn)的數(shù)目與待檢測(cè)代碼包含的函數(shù)的個(gè)數(shù)相同;第一函數(shù)調(diào)用圖中的有向邊表示該有向邊所連接的兩個(gè)節(jié)點(diǎn)所表示的兩個(gè)函數(shù)之間的調(diào)用關(guān)系,如果有向邊從一個(gè)節(jié)點(diǎn)指向另一個(gè)節(jié)點(diǎn),表示該節(jié)點(diǎn)所表示的函數(shù)調(diào)用另一個(gè)節(jié)點(diǎn)所表示的函數(shù)。如圖2所示,為本實(shí)施例給出的一種第一函數(shù)調(diào)用圖的結(jié)構(gòu)示意圖,圖2中的小圓圈表示節(jié)點(diǎn),兩個(gè)小圓圈之間的有向箭頭表示有向邊。圖2中的加粗箭頭展示了待檢測(cè)代碼中存在的調(diào)用環(huán)路。
      [0032]值得說(shuō)明的是,待檢測(cè)代碼可能位于至少一個(gè)代碼文件中,代碼檢測(cè)裝置可以逐個(gè)掃描代碼文件,獲取各個(gè)代碼文件中的代碼并進(jìn)行動(dòng)態(tài)分析。
      [0033]在一可選實(shí)施方式中,上述步驟101的一種【具體實(shí)施方式】為:運(yùn)行待檢測(cè)代碼,以獲得待檢測(cè)代碼在運(yùn)行狀態(tài)時(shí)所包含的函數(shù)和函數(shù)之間的調(diào)用關(guān)系,并根據(jù)待檢測(cè)代碼在運(yùn)行狀態(tài)時(shí)所包含的函數(shù)和函數(shù)之間的調(diào)用關(guān)系生成第一函數(shù)調(diào)用圖。
      [0034]在對(duì)待檢測(cè)代碼進(jìn)行動(dòng)態(tài)分析,以獲取第一函數(shù)調(diào)用圖時(shí),可采用程序插樁技術(shù)、以及其他方式來(lái)進(jìn)行分析處理,只要可以檢測(cè)出待檢測(cè)代碼運(yùn)行中的函數(shù)調(diào)用邏輯即可。可選的,上述實(shí)施方式采用程序插樁技術(shù)來(lái)實(shí)現(xiàn)時(shí),可包括:代碼檢測(cè)裝置利用第一插裝代碼,監(jiān)控待檢測(cè)代碼的運(yùn)行過(guò)程,以確定待檢測(cè)代碼包含的函數(shù)和函數(shù)之間的調(diào)用關(guān)系,并在第一函數(shù)調(diào)用圖中添加用于表示函數(shù)的節(jié)點(diǎn)和用于表示函數(shù)之間的調(diào)用關(guān)系的有向邊。
      [0035]第一插裝代碼是插入待檢測(cè)代碼中的代碼,這部分代碼負(fù)責(zé)監(jiān)控待檢測(cè)代碼的運(yùn)行過(guò)程,以確定待檢測(cè)代碼在運(yùn)行狀態(tài)時(shí)包含的函數(shù)和函數(shù)之間的調(diào)用關(guān)系,并根據(jù)監(jiān)控到的信息生成第一函數(shù)調(diào)用圖。具體的,第一插裝代碼可以在待檢測(cè)代碼運(yùn)行到每個(gè)函數(shù)時(shí),獲取該函數(shù)的名稱以及調(diào)用該函數(shù)的上一函數(shù)的名稱,并根據(jù)該函數(shù)的名稱和上一函數(shù)的名稱,根據(jù)該函數(shù)的名稱和上一函數(shù)的名稱,在第一函數(shù)調(diào)用圖中添加用于表示該函數(shù)的節(jié)點(diǎn)和表示該函數(shù)
      當(dāng)前第1頁(yè)1 2 3 4 
      網(wǎng)友詢問(wèn)留言 已有0條留言
      • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1