亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

用以獲得應(yīng)用程序代碼執(zhí)行率的仿真裝置及其方法

文檔序號(hào):6651163閱讀:243來(lái)源:國(guó)知局
專利名稱:用以獲得應(yīng)用程序代碼執(zhí)行率的仿真裝置及其方法
技術(shù)領(lǐng)域
本發(fā)明涉及一種仿真(Simulation)系統(tǒng)及方法,尤其涉及一種用以獲得應(yīng)用程序代碼執(zhí)行率的仿真裝置及其方法。
背景技術(shù)
代碼覆蓋率(Code Coverage)是用以衡量應(yīng)用程序代碼的執(zhí)行效率的一個(gè)重要指標(biāo),因此,對(duì)于代碼覆蓋率的衡量與計(jì)算也是一種重要的軟件技術(shù)。
目前,比較流行的代碼覆蓋率的計(jì)算技術(shù),是在用戶程序編譯時(shí),在應(yīng)用程序中插入特殊的代碼或指令,稱為樁點(diǎn),并根據(jù)插入的位置等信息構(gòu)建數(shù)據(jù)庫(kù),當(dāng)程序運(yùn)行到樁點(diǎn)時(shí),特殊指令被執(zhí)行,產(chǎn)生特定的動(dòng)作,如進(jìn)入異常(exception)處理程序,或向特定地址寫入特定的數(shù)據(jù)等,動(dòng)作目的是通知相應(yīng)的分析模塊,告知該樁點(diǎn)已被執(zhí)行,分析模塊根據(jù)之前建好的數(shù)據(jù)庫(kù)信息,以及所經(jīng)過(guò)的樁點(diǎn)信息,分析統(tǒng)計(jì)出代碼的執(zhí)行覆蓋率等。
打樁技術(shù)一般應(yīng)用于c,c++代碼,通常需要編譯器(compiler)配合,編譯時(shí)打入樁點(diǎn),或者在進(jìn)行編譯之前,需要特殊的預(yù)處理模塊對(duì)源文件進(jìn)行特別的預(yù)處理(比如在源文件中程序分支或語(yǔ)句,函數(shù)之后插入特殊的代碼),再通過(guò)編譯器生成目標(biāo)代碼。
然而,這種方式的主要缺點(diǎn)為1、需要編譯器進(jìn)行調(diào)整修改,或提供專門的原文件預(yù)處理模塊。
2、由于是在文件中插入代碼或特殊指令,在一定的程度上影響程序的執(zhí)行,同時(shí)特殊代碼的執(zhí)行本身需要執(zhí)行時(shí)間,消耗一定的資源,所以打樁后的程序與最終的目標(biāo)程序存在差別,統(tǒng)計(jì)結(jié)果存在一定的誤差,甚至執(zhí)行流程結(jié)果會(huì)產(chǎn)生錯(cuò)誤。
3、存在打樁密度問(wèn)題,即在何處打樁,打多少樁,如果打樁太少將不能有效的統(tǒng)計(jì),太多則嚴(yán)重影響執(zhí)行效率與統(tǒng)計(jì)結(jié)果誤差。
4、對(duì)于匯編語(yǔ)言編寫的代碼有可能不能很好的處理。
此外,還有一些硬件技術(shù),例如通過(guò)片上兩個(gè)計(jì)數(shù)器和兩個(gè)觸發(fā)控制寄存器的工作,提供對(duì)軟件性能剖析功能的支持。雖然這種技術(shù)進(jìn)行代碼剖析時(shí),不需打樁插入代碼,且不會(huì)因此影響程序執(zhí)行的速度,但由于它需要一定的硬件資源的支持,且一次只能對(duì)部分代碼進(jìn)行性能剖析,因此,使用不方便,且需增加額外的電路成本。
由此可見(jiàn),如何提供一種方便快捷的計(jì)算應(yīng)用程序代碼覆蓋率的系統(tǒng)及方法,已經(jīng)成為業(yè)內(nèi)亟待解決的問(wèn)題。

發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問(wèn)題在于提供一種用以獲得代碼覆蓋率的仿真裝置及其方法,其不需要對(duì)程序進(jìn)行打樁,可方便快捷的計(jì)算應(yīng)用程序代碼覆蓋率。
為解決上述技術(shù)問(wèn)題,本發(fā)明提供一種用以獲得應(yīng)用程序代碼執(zhí)行率的仿真裝置,包括系統(tǒng)模擬模塊,用于實(shí)現(xiàn)對(duì)CPU及各功能模塊的模擬,根據(jù)所述應(yīng)用程序代碼的運(yùn)行情況,提供執(zhí)行代碼指令的參數(shù)信息;調(diào)試信息獲取模塊,用于獲取編譯器在編譯操作后產(chǎn)生的調(diào)試信息,提供所述應(yīng)用程序的每一行代碼與程序指針的對(duì)應(yīng)關(guān)系;代碼統(tǒng)計(jì)模塊,用于根據(jù)系統(tǒng)模擬模塊提供的執(zhí)行代碼指令的參數(shù)信息,與調(diào)試信息獲取模塊提供的應(yīng)用程序的每一行代碼與程序指針的對(duì)應(yīng)關(guān)系,對(duì)應(yīng)用程序代碼的執(zhí)行率進(jìn)行計(jì)算。
本發(fā)明還可以進(jìn)一步包括外設(shè)功能模擬模塊,與所述系統(tǒng)模擬模塊相連,用于實(shí)現(xiàn)對(duì)受控于系統(tǒng)模擬模塊的外設(shè)功能的模擬。
本發(fā)明還提供一種利用仿真裝置獲得應(yīng)用程序代碼執(zhí)行率的方法,包括如下步驟
(1)利用仿真裝置模擬應(yīng)用程序運(yùn)行的計(jì)算機(jī)環(huán)境;(2)編譯所述應(yīng)用程序的源代碼,產(chǎn)生執(zhí)行代碼以及每一行代碼與程序指針的對(duì)應(yīng)關(guān)系;(3)由仿真裝置運(yùn)行執(zhí)行代碼,并根據(jù)所述代碼的運(yùn)行情況,記錄執(zhí)行代碼指令的參數(shù)信息;(4)根據(jù)所述執(zhí)行代碼指令的參數(shù)信息,與應(yīng)用程序的每一行代碼與程序指針的對(duì)應(yīng)關(guān)系,計(jì)算出應(yīng)用程序代碼的執(zhí)行率。
本發(fā)明不需要編譯器特殊處理,以及特別的源文件預(yù)處理模塊。程序中不需要打樁,不破壞目標(biāo)應(yīng)用程序,目標(biāo)程序與被測(cè)試程序一致,不存在執(zhí)行誤差,以及額外的時(shí)鐘周期消耗。每一條語(yǔ)句指令都可得到統(tǒng)計(jì)分析,可以說(shuō)是最密的打樁密度,統(tǒng)計(jì)結(jié)果準(zhǔn)確。


圖1為根據(jù)本發(fā)明實(shí)施例所述的獲得應(yīng)用程序代碼執(zhí)行率的仿真裝置結(jié)構(gòu)示意圖;圖2為根據(jù)本發(fā)明實(shí)施例所述的代碼統(tǒng)計(jì)模塊示意圖;圖3為根據(jù)本發(fā)明實(shí)施例所述的可獲得應(yīng)用程序代碼執(zhí)行率的仿真方法流程示意圖;圖4為根據(jù)本發(fā)明實(shí)施例所述的運(yùn)行執(zhí)行代碼的流程示意圖。
具體實(shí)施例方式
仿真裝置(Simulator),就是使用計(jì)算機(jī)的資源來(lái)模擬內(nèi)含有MPU/MCU(主處理單元)控制的任何計(jì)算機(jī)裝置的一種功能模擬器。它通常被作為以MPU/MCU控制的電子產(chǎn)品的開(kāi)發(fā)工具而提供給MPU/MCU用戶。
如圖1所示,為根據(jù)本發(fā)明實(shí)施例所述的獲得應(yīng)用程序代碼執(zhí)行率的仿真裝置1,包括系統(tǒng)模擬模塊11、外設(shè)功能模擬模塊12、調(diào)試信息獲取模塊13,以及代碼統(tǒng)計(jì)模塊14。
其中,所述系統(tǒng)模擬模塊11實(shí)現(xiàn)對(duì)CPU的模擬和MPU中其它功能模塊的模擬;所述外設(shè)功能模擬模塊12實(shí)現(xiàn)對(duì)受控于MPU的一些外設(shè)功能的模擬;調(diào)試(Debug)信息獲取模塊13用于獲取編譯器在編譯鏈接操作后產(chǎn)生的調(diào)試(Debug)信息,提供所述應(yīng)用程序的每一行代碼與程序指針的對(duì)應(yīng)關(guān)系;代碼統(tǒng)計(jì)模塊14用于根據(jù)系統(tǒng)模擬模塊提供的執(zhí)行代碼指令的指令序列與調(diào)試(Debug)信息獲取模塊13獲取的所述應(yīng)用程序的每一行代碼與程序指針的對(duì)應(yīng)關(guān)系獲得代碼覆蓋率和函數(shù)的執(zhí)行覆蓋率,同時(shí),代碼統(tǒng)計(jì)模塊14還可以用于根據(jù)系統(tǒng)模擬模塊提供的記錄每條指令所消耗的CPU時(shí)鐘周期和調(diào)試(Debug)信息獲取模塊13提供的調(diào)試(Debug)信息以獲得程序的執(zhí)行效率。
現(xiàn)有的仿真裝置一般都具有MPU系統(tǒng)模擬模塊,以及受控的外設(shè)功能模擬模塊,因此,實(shí)施本發(fā)明,可以充分利用現(xiàn)有仿真裝置中的功能模塊。
如圖1所示,MPU系統(tǒng)模擬模塊11可以包括CPU模擬單元、存儲(chǔ)器單元、定時(shí)器功能單元、中斷功能單元、外設(shè)接口單元。
CPU模擬單元是仿真裝置的核心,其包括對(duì)CPU指令操作碼的模擬和對(duì)CPU資源的模擬,通過(guò)PC(Program Counter,程序指針)指向要模擬的指令操作碼地址,從存儲(chǔ)器單元的該地址中取出該要模擬的指令碼,解釋、并執(zhí)行該指令碼。每模擬執(zhí)行完一條指令碼,就要更新PC、CCC(Cpu CycleCounter,CPU時(shí)鐘周期計(jì)數(shù)器)中的內(nèi)容,為下一條指令的模擬執(zhí)行準(zhǔn)備,同時(shí),也提供出CPU重要的資源,即CPU的空間、時(shí)間資源,尤其是CCC的內(nèi)容,即模擬的CPU時(shí)鐘周期,可以作為系統(tǒng)的時(shí)間基準(zhǔn)被提供。
一般來(lái)說(shuō),PC里面可以寫8-bit數(shù)據(jù),但是其實(shí)只有0--15是有意義的,它就是指令段的地址。而所謂“程序指針”的意義,就是說(shuō)“CPU下一步要執(zhí)行的工作,便是PC內(nèi)容所指的地址”。
例如,假定硬件平臺(tái)為860T,時(shí)鐘為50MHz;SDRAM空間4M×32bit,地址范圍從0x00000000~0x00FFFFFF,訪問(wèn)時(shí)間10ns;Flash空間512K×8bit,訪問(wèn)時(shí)間為100ns,地址范圍從0x02800000~0x0287FFFF(至于其它單片機(jī),運(yùn)行原理大致相同,可以類推)。860T在上電后,PC(Program Counter)=0x2800100,程序從PC指定的地方執(zhí)行,首先執(zhí)行初始化代碼(BootCode),再執(zhí)行主程序(AppCode)。程序從Flash中讀取指令代碼(code),來(lái)完成數(shù)據(jù)的傳輸。
此外,一條機(jī)器指令一般就是指一行源代碼。一個(gè)軟件的源代碼行數(shù)不包括程序注釋、作業(yè)命令、調(diào)試程序在內(nèi)。
如圖1所示,存儲(chǔ)器單元可以包括一組特殊功能寄存器連接定時(shí)器功能單元、中斷功能單元、外設(shè)接口單元。通常,可以用計(jì)算機(jī)的存儲(chǔ)器資源來(lái)模擬MPU的存儲(chǔ)器,用計(jì)算機(jī)的存儲(chǔ)器單元來(lái)模擬MPU中特殊功能寄存器單元(譬如實(shí)現(xiàn)定時(shí)器功能的各個(gè)單元,實(shí)現(xiàn)中斷功能的各個(gè)單元,以及實(shí)現(xiàn)各I/O接口功能的各個(gè)單元等等),并通過(guò)編寫一些軟件來(lái)模擬這些特殊功能寄存器單元的功能。通過(guò)對(duì)CPU指令操作碼的模擬執(zhí)行,會(huì)對(duì)MPU的存儲(chǔ)器進(jìn)行讀寫操作,尤其是對(duì)一系列的特殊功能寄存器進(jìn)行讀寫操作,這些讀寫操作便會(huì)觸發(fā)上述特殊功能寄存器單元模擬軟件的執(zhí)行,從而實(shí)現(xiàn)MPU各功能模塊的模擬。
外設(shè)功能模擬模塊12,可以包括LCD功能單元、鍵盤功能單元、音頻功能單元、其它功能單元。對(duì)MPU控制的上述各個(gè)外設(shè)功能的模擬可通過(guò)在計(jì)算機(jī)顯示器上編寫出各種GUI,來(lái)提供各外設(shè)功能的支持。譬如,在顯示器上編寫出受MPU控制的LCD各種操作UI,如LCD設(shè)置UI、LCD顯示UI,鍵盤的I/O設(shè)置UI、鍵盤使用顯示UI等等。當(dāng)然,上述各外設(shè)的使用顯示內(nèi)容要相應(yīng)于上述CPU指令碼的模擬執(zhí)行,即通過(guò)對(duì)MPU各個(gè)特殊功能寄存器的讀寫操作的模擬,才可真正實(shí)現(xiàn)各外設(shè)的功能。
如圖2所示,代碼統(tǒng)計(jì)模塊14還可以進(jìn)一步包括代碼覆蓋率模塊141,與代碼執(zhí)行效率模塊142。
其中,代碼覆蓋率模塊141用于根據(jù)調(diào)試(Debug)信息獲取模塊13提供的調(diào)試(Debug)信息中的每一行代碼對(duì)應(yīng)的PC的信息,根據(jù)仿真裝置1的系統(tǒng)模擬模塊執(zhí)行指令的PC序列,可分析出源代碼中每一行是否被執(zhí)行過(guò),計(jì)算出其代碼覆蓋率。
其中,計(jì)算代碼覆蓋率的公式為代碼覆蓋率=被執(zhí)行過(guò)的代碼行數(shù)/總的代碼行數(shù)。
代碼覆蓋率的處理中,除可分析出源代碼中每一行是否被執(zhí)行過(guò)外,還可以進(jìn)一步分析源代碼中每一行被執(zhí)行的次數(shù)。
此外,代碼覆蓋率模塊141,還用于根據(jù)調(diào)試(Debug)信息獲取模塊13提供的調(diào)試(Debug)信息中函數(shù)的起始地址(PC)與結(jié)束地址(PC),可以確定其在源代碼中對(duì)應(yīng)的行信息即函數(shù)的總行數(shù),根據(jù)之前分析的每行被執(zhí)行的狀況可分析統(tǒng)計(jì)出函數(shù)的執(zhí)行覆蓋率。
其中,計(jì)算函數(shù)的執(zhí)行覆蓋率的公式為函數(shù)的執(zhí)行覆蓋率=函數(shù)中被執(zhí)行的行數(shù)/函數(shù)總行數(shù)。
如圖2所示,代碼執(zhí)行效率模塊142,可以通過(guò)記錄每一條指令所消耗的CPU時(shí)鐘周期,并通過(guò)調(diào)試(Debug)獲取模塊13提供的調(diào)試(Debug)統(tǒng)計(jì)出源代碼中每一行消耗的CPU時(shí)鐘周期。
其中,所述的調(diào)試(Debug)獲取模塊13提供的調(diào)試(Debug)是指行(line)與指令(PC)的對(duì)應(yīng)關(guān)系,其將上述每一條指令所消耗的CPU時(shí)鐘周期加到對(duì)應(yīng)的行(line)中,可以統(tǒng)計(jì)出源代碼中每一行消耗的CPU時(shí)鐘周期,即代碼執(zhí)行效率。
此外,代碼執(zhí)行效率模塊142,還可以對(duì)函數(shù)執(zhí)行效率進(jìn)行統(tǒng)計(jì),通過(guò)建立函數(shù)的調(diào)用棧,對(duì)仿真裝置1執(zhí)行的每一條指令進(jìn)行分析,如果是函數(shù)調(diào)用(call)指令,則將當(dāng)前的PC以及被調(diào)用的函數(shù)PC、當(dāng)前仿真裝置運(yùn)行的總CPU時(shí)鐘周期壓入棧中,執(zhí)行結(jié)束后,用當(dāng)前仿真裝置運(yùn)行的總CPU時(shí)鐘周期減去之前記錄的CPU時(shí)鐘周期,結(jié)果即為函數(shù)運(yùn)行消耗的CPU時(shí)鐘周期,記錄該結(jié)果。根據(jù)之前記錄的PC值,將函數(shù)執(zhí)行的周期記錄到對(duì)應(yīng)的行(line)中,再?gòu)臈V袕棾鲋皦喝氲南鄳?yīng)內(nèi)容。
參見(jiàn)圖3,為根據(jù)本發(fā)明實(shí)施例所述的可獲得應(yīng)用程序代碼執(zhí)行率的仿真方法流程示意圖,首先利用仿真裝置模擬應(yīng)用程序運(yùn)行的計(jì)算機(jī)環(huán)境(步驟301);然后編譯所述應(yīng)用程序的源代碼,產(chǎn)生執(zhí)行代碼(target file)以及每一行代碼與程序指針的對(duì)應(yīng)關(guān)系(步驟302);由仿真裝置運(yùn)行執(zhí)行代碼,并記錄執(zhí)行代碼指令的參數(shù)信息,例如每條指令的程序指針序列以及每條指令消耗的CPU時(shí)鐘周期等(步驟303);根據(jù)所述每一行代碼與程序指針的對(duì)應(yīng)關(guān)系、CPU時(shí)鐘周期,以及程序指針序列等參數(shù)信息,分析每一行代碼是否被執(zhí)行過(guò),從而計(jì)算出所述應(yīng)用程序的代碼覆蓋率以及執(zhí)行效率等信息(步驟304)。
其中,可以利用上述的仿真裝置模擬出目標(biāo)程序運(yùn)行的計(jì)算機(jī)軟硬件環(huán)境;在源代碼經(jīng)過(guò)編譯處理后,產(chǎn)生目標(biāo)系統(tǒng)的執(zhí)行代碼,同時(shí)產(chǎn)生debug信息;然后運(yùn)行執(zhí)行代碼,啟動(dòng)代碼統(tǒng)計(jì)模塊,記錄每條指令執(zhí)行消耗的CPU時(shí)鐘周期數(shù)和每條指令的PC;代碼統(tǒng)計(jì)模塊根據(jù)記錄每條指令所消耗的CPU時(shí)鐘周期和Debug信息獲得代碼覆蓋率、函數(shù)的執(zhí)行覆蓋率和程序的執(zhí)行效率等信息。
其中,對(duì)于代碼覆蓋率的處理,可以利用上述的代碼覆蓋率模塊,通過(guò)調(diào)試信息中的每一行對(duì)應(yīng)的PC的信息,根據(jù)仿真裝置執(zhí)行指令的PC序列,分析出源代碼中每一行是否被執(zhí)行過(guò),從而計(jì)算出其代碼覆蓋率。其中,計(jì)算代碼覆蓋率的公式為代碼覆蓋率=被執(zhí)行過(guò)的代碼行/總的代碼行數(shù)代碼覆蓋率的處理中,除可分析出源代碼中每一行是否被執(zhí)行過(guò)外,還能分析出源代碼中每一行被執(zhí)行的次數(shù)。
對(duì)于一個(gè)函數(shù)的執(zhí)行覆蓋率統(tǒng)計(jì),可以根據(jù)debug信息中函數(shù)的起始與結(jié)束PC可以確定其在源代碼中對(duì)應(yīng)的行信息,根據(jù)之前分析的每行被執(zhí)行的狀況可分析統(tǒng)計(jì)出函數(shù)中的執(zhí)行覆蓋率。
其中,計(jì)算函數(shù)的執(zhí)行覆蓋率的公式為函數(shù)的執(zhí)行覆蓋率=函數(shù)中被執(zhí)行的行數(shù)/函數(shù)總行數(shù)。
對(duì)于執(zhí)行效率的統(tǒng)計(jì)處理,可以利用上述代碼執(zhí)行效率模塊根據(jù)每一條指令所消耗的周期,通過(guò)debug信息統(tǒng)計(jì)出源代碼中每一行消耗的CPU時(shí)鐘周期,即代碼執(zhí)行效率。
對(duì)于函數(shù)的執(zhí)行效率的處理,可以通過(guò)建立函數(shù)的調(diào)用棧,對(duì)仿真裝置1執(zhí)行的每一條指令進(jìn)行分析,如果是函數(shù)調(diào)用(call)指令,則將當(dāng)前的PC以及被調(diào)用的函數(shù)PC、當(dāng)前仿真裝置運(yùn)行的總CPU時(shí)鐘周期壓入棧中,執(zhí)行結(jié)束后,用當(dāng)前仿真裝置運(yùn)行的總CPU時(shí)鐘周期減去之前記錄的CPU時(shí)鐘周期,結(jié)果即為函數(shù)運(yùn)行消耗的CPU時(shí)鐘周期,記錄該結(jié)果。根據(jù)之前記錄的PC值,將函數(shù)執(zhí)行的周期記錄到對(duì)應(yīng)的行(line)中,再?gòu)臈V袕棾鲋皦喝氲南鄳?yīng)內(nèi)容。
如圖4所示,為根據(jù)本發(fā)明實(shí)施例所述的運(yùn)行執(zhí)行代碼的流程示意圖。首先,初始化PC、CCC(Cpu Cycle Counter)(步驟401);然后通過(guò)PC指向要模擬的指令操作碼地址,從存儲(chǔ)器的該地址中取出該要模擬的指令碼(步驟402);更新PC、CCC中的內(nèi)容(步驟403、404);解釋、并執(zhí)行該指令碼(步驟405);判斷是否需要中斷處理(步驟406);若是,進(jìn)行必要的處理,調(diào)整PC(步驟407);若否,則判斷是否繼續(xù)仿真裝置執(zhí)行代碼的運(yùn)行(步驟408);若是,則返回步驟402;若否,則停止仿真裝置執(zhí)行代碼的運(yùn)行。
這樣,就可以通過(guò)仿真裝置在計(jì)算機(jī)上模擬出目標(biāo)應(yīng)用程序運(yùn)行的軟硬件環(huán)境,并模擬實(shí)際環(huán)境的時(shí)鐘周期。在仿真裝置運(yùn)行目標(biāo)應(yīng)用程序時(shí),仿真裝置會(huì)記錄應(yīng)用程序執(zhí)行的指令序列,即程序運(yùn)行所經(jīng)過(guò)的每一條指令的PC以及每條指令所消耗的CPU時(shí)鐘周期。建立數(shù)據(jù)庫(kù),通過(guò)編譯器生成的debug信息,將可以得到每條PC對(duì)應(yīng)的原文件的行號(hào),文件名等信息。結(jié)合數(shù)據(jù)庫(kù)中經(jīng)過(guò)的每一條PC信息,與debug信息可以分析統(tǒng)計(jì)出原文件的代碼執(zhí)行覆蓋率,以及每個(gè)函數(shù),每一條語(yǔ)句的執(zhí)行效率。
權(quán)利要求
1.一種用以獲得應(yīng)用程序代碼執(zhí)行率的仿真裝置,其特征在于,包括系統(tǒng)模擬模塊,用于實(shí)現(xiàn)對(duì)CPU及各功能模塊的模擬,根據(jù)所述應(yīng)用程序代碼的運(yùn)行情況,提供執(zhí)行代碼指令的參數(shù)信息;調(diào)試信息獲取模塊,用于獲取編譯器在編譯操作后產(chǎn)生的調(diào)試信息,提供所述應(yīng)用程序的每一行代碼與程序指針的對(duì)應(yīng)關(guān)系;代碼統(tǒng)計(jì)模塊,用于根據(jù)系統(tǒng)模擬模塊提供的執(zhí)行代碼指令的參數(shù)信息,與調(diào)試信息獲取模塊提供的應(yīng)用程序的每一行代碼與程序指針的對(duì)應(yīng)關(guān)系,對(duì)應(yīng)用程序代碼的執(zhí)行率進(jìn)行計(jì)算。
2.如權(quán)利要求1所述的裝置,其特征在于,進(jìn)一步包括外設(shè)功能模擬模塊,與所述系統(tǒng)模擬模塊相連,用于實(shí)現(xiàn)對(duì)受控于系統(tǒng)模擬模塊的外設(shè)功能的模擬。
3.如權(quán)利要求1所述的裝置,其特征在于所述系統(tǒng)模擬模塊,提供的執(zhí)行代碼指令參數(shù)信息包括程序指針序列信息;所述代碼統(tǒng)計(jì)模塊,包括代碼覆蓋率模塊,用于根據(jù)系統(tǒng)模擬模塊提供的程序指針序列信息,與調(diào)試信息獲取模塊提供的應(yīng)用程序的每一行代碼與程序指針的對(duì)應(yīng)關(guān)系,分析所述應(yīng)用程序的每一行代碼是否被執(zhí)行過(guò),從而計(jì)算出所述應(yīng)用程序的代碼覆蓋率。
4.如權(quán)利要求3所述的裝置,其特征在于,所述代碼覆蓋率模塊,進(jìn)一步根據(jù)系統(tǒng)模擬模塊提供的程序指針序列信息,與調(diào)試信息獲取模塊提供的應(yīng)用程序的每一行代碼與程序指針的對(duì)應(yīng)關(guān)系,分析出所述應(yīng)用程序的每一行代碼被執(zhí)行的次數(shù)。
5.如權(quán)利要求3所述的裝置,其特征在于所述調(diào)試信息獲取模塊,進(jìn)一步提供應(yīng)用程序執(zhí)行中函數(shù)的起始地址與結(jié)束地址給所述代碼覆蓋率模塊;所述代碼覆蓋率模塊,進(jìn)一步根據(jù)系統(tǒng)模擬模塊提供的程序指針序列信息、調(diào)試信息獲取模塊提供的應(yīng)用程序的每一行代碼與程序指針的對(duì)應(yīng)關(guān)系,以及調(diào)試信息獲取模塊提供的函數(shù)起始地址與結(jié)束地址,確定函數(shù)在應(yīng)用程序代碼中對(duì)應(yīng)的行信息,進(jìn)而計(jì)算出函數(shù)的執(zhí)行覆蓋率。
6.如權(quán)利要求1所述的裝置,其特征在于所述系統(tǒng)模擬模塊,提供的執(zhí)行代碼指令參數(shù)信息包括每條指令消耗的CPU時(shí)鐘周期信息;所述代碼統(tǒng)計(jì)模塊,包括代碼執(zhí)行效率模塊,用于根據(jù)系統(tǒng)模擬模塊提供的CPU時(shí)鐘周期信息,與調(diào)試信息獲取模塊提供的所述應(yīng)用程序的每一行代碼與程序指針的對(duì)應(yīng)關(guān)系,計(jì)算出每一行代碼消耗的CPU時(shí)鐘周期。
7.如權(quán)利要求6所述的裝置,其特征在于,所述的代碼執(zhí)行效率模塊,進(jìn)一步根據(jù)系統(tǒng)模擬模塊提供的CPU時(shí)鐘周期信息,與調(diào)試信息獲取模塊提供的所述應(yīng)用程序的每一行代碼與程序指針的對(duì)應(yīng)關(guān)系,分析其中的函數(shù)調(diào)用指令,計(jì)算出函數(shù)執(zhí)行效率。
8.一種利用仿真裝置獲得應(yīng)用程序代碼執(zhí)行率的方法,其特征在于,包括如下步驟(1)利用仿真裝置模擬應(yīng)用程序運(yùn)行的計(jì)算機(jī)環(huán)境;(2)編譯所述應(yīng)用程序的源代碼,產(chǎn)生執(zhí)行代碼以及每一行代碼與程序指針的對(duì)應(yīng)關(guān)系;(3)由仿真裝置運(yùn)行執(zhí)行代碼,并根據(jù)所述代碼的運(yùn)行情況,記錄執(zhí)行代碼指令的參數(shù)信息;(4)根據(jù)所述執(zhí)行代碼指令的參數(shù)信息,與應(yīng)用程序的每一行代碼與程序指針的對(duì)應(yīng)關(guān)系,計(jì)算出應(yīng)用程序代碼的執(zhí)行率。
9.如權(quán)利要求8所述的方法,其特征在于步驟(3)所述的執(zhí)行代碼指令的參數(shù)信息,包括程序指針序列信息;步驟(4)所述計(jì)算出應(yīng)用程序代碼的執(zhí)行率,包括根據(jù)程序指針序列信息,與應(yīng)用程序的每一行代碼與程序指針的對(duì)應(yīng)關(guān)系,分析所述應(yīng)用程序的每一行代碼是否被執(zhí)行過(guò),從而計(jì)算出所述應(yīng)用程序的代碼覆蓋率。
10.如權(quán)利要求9所述的方法,其特征在于,計(jì)算代碼覆蓋率的公式為代碼覆蓋率=被執(zhí)行過(guò)的代碼行數(shù)/總的代碼行數(shù)。
11.如權(quán)利要求9所述的方法,其特征在于,所述步驟(4),進(jìn)一步包括根據(jù)程序指針序列信息,與應(yīng)用程序的每一行代碼與程序指針的對(duì)應(yīng)關(guān)系,分析出所述應(yīng)用程序的每一行代碼被執(zhí)行的次數(shù)。
12.如權(quán)利要求9所述的方法,其特征在于所述步驟(2),進(jìn)一步產(chǎn)生應(yīng)用程序執(zhí)行中函數(shù)的起始地址與結(jié)束地址;所述步驟(4),進(jìn)一步根據(jù)程序指針序列信息、應(yīng)用程序的每一行代碼與程序指針的對(duì)應(yīng)關(guān)系,以及函數(shù)起始地址與結(jié)束地址,確定函數(shù)在應(yīng)用程序代碼中對(duì)應(yīng)的行信息,進(jìn)而計(jì)算出函數(shù)的執(zhí)行覆蓋率。
13.如權(quán)利要求12所述的方法,其特征在于,所述計(jì)算函數(shù)的執(zhí)行覆蓋率的公式為函數(shù)的執(zhí)行覆蓋率=函數(shù)中被執(zhí)行的行數(shù)/函數(shù)總行數(shù)。
14.如權(quán)利要求8所述的方法,其特征在于步驟(3)所述的執(zhí)行代碼指令的參數(shù)信息,包括每條指令消耗的CPU時(shí)鐘周期;步驟(4)所述計(jì)算出應(yīng)用程序代碼的執(zhí)行率,包括根據(jù)所述CPU時(shí)鐘周期信息,與應(yīng)用程序的每一行代碼與程序指針的對(duì)應(yīng)關(guān)系,計(jì)算出每一行代碼消耗的CPU時(shí)鐘周期。
15.如權(quán)利要求14所述的方法,其特征在于,所述步驟(4)進(jìn)一步根據(jù)CPU時(shí)鐘周期信息,與應(yīng)用程序的每一行代碼與程序指針的對(duì)應(yīng)關(guān)系,分析代碼中的函數(shù)調(diào)用指令,計(jì)算出函數(shù)執(zhí)行效率。
16.如權(quán)利要求15所述的方法,其特征在于,所述計(jì)算函數(shù)執(zhí)行效率的步驟,包括對(duì)每一條指令進(jìn)行分析,如果是函數(shù)調(diào)用指令,則將當(dāng)前的程序指針以及被調(diào)用函數(shù)的程序指針、當(dāng)前仿真裝置運(yùn)行的總CPU時(shí)鐘周期壓入棧中;執(zhí)行結(jié)束后,用當(dāng)前仿真裝置運(yùn)行的總CPU時(shí)鐘周期減去之前記錄的CPU時(shí)鐘周期,將該結(jié)果記錄為函數(shù)運(yùn)行消耗的CPU時(shí)鐘周期;根據(jù)之前記錄的程序指針值,將函數(shù)執(zhí)行的周期記錄到對(duì)應(yīng)的代碼行中,再?gòu)臈V袕棾鲋皦喝氲南鄳?yīng)內(nèi)容。
全文摘要
本發(fā)明公開(kāi)了一種用以獲得應(yīng)用程序代碼執(zhí)行率的仿真裝置及其方法,包括系統(tǒng)模擬模塊,用于實(shí)現(xiàn)對(duì)CPU及各功能模塊的模擬,根據(jù)所述應(yīng)用程序代碼的運(yùn)行情況,提供執(zhí)行代碼指令的參數(shù)信息;外設(shè)功能模擬模塊,與所述系統(tǒng)模擬模塊相連,用于實(shí)現(xiàn)對(duì)受控于系統(tǒng)模擬模塊的外設(shè)功能的模擬;調(diào)試信息獲取模塊,用于獲取編譯器在編譯操作后產(chǎn)生的調(diào)試信息,提供所述應(yīng)用程序的每一行代碼與程序指針的對(duì)應(yīng)關(guān)系;代碼統(tǒng)計(jì)模塊,用于根據(jù)系統(tǒng)模擬模塊提供的執(zhí)行代碼指令的參數(shù)信息,與調(diào)試信息獲取模塊提供的應(yīng)用程序的每一行代碼與程序指針的對(duì)應(yīng)關(guān)系,對(duì)應(yīng)用程序代碼的執(zhí)行率進(jìn)行計(jì)算。本發(fā)明方便快捷的實(shí)現(xiàn)了對(duì)代碼覆蓋率以及執(zhí)行效率的統(tǒng)計(jì)。
文檔編號(hào)G06F9/45GK1979422SQ200510127728
公開(kāi)日2007年6月13日 申請(qǐng)日期2005年12月2日 優(yōu)先權(quán)日2005年12月2日
發(fā)明者劉凱, 楊有成 申請(qǐng)人:凌陽(yáng)科技股份有限公司, 北京北陽(yáng)電子技術(shù)有限公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1