本發明涉及虛擬驗證系統仿真技術領域,尤其涉及一種實現虛擬驗證系統覆蓋率分析的方法。
背景技術:
虛擬驗證系統是能夠對嵌入式硬件系統進行完整模擬的軟件系統。用戶可以在該系統上模擬運行嵌入式軟件,無需相應的硬件即可對嵌入式軟件進行測試與調試。通過使用虛擬驗證系統,用戶不僅可以極大地縮短嵌入式軟件研制周期,而且能夠避免高昂的輔助測試硬件研制費用、極大地降低系統成本。產品可以廣泛應用于航空、航天、武器裝備、汽車、機器人、工業控制等嵌入式系統開發領域,提升這些行業的勞動生產效率、降低成本、增強產品的競爭能力。
虛擬驗證系統在提供純軟件模擬板級硬件測試環境的基礎上,提供了大量的輔助調試測試手段,包括暫停仿真執行、斷點設置、下一步執行(4種形式)、查看變量、仿真硬件信息以及故障注入、數據采集、覆蓋率分析功能。其中,覆蓋率分析功能能夠完成對虛擬驗證系統仿真執行的用戶代碼進行指令執行次數統計、分支跳轉情況統計、代碼覆蓋率分析等操作,最終生成覆蓋分析報告。
技術實現要素:
本發明的目的在于提供一種實現虛擬驗證系統覆蓋率分析的方法,在虛擬驗證系統下,用戶能夠對已仿真執行的用戶代碼進行指令執行次數統計、分支跳轉情況統計、代碼覆蓋率分析等操作。
為達上述目的,本發明通過以下技術方案實現:
一種實現虛擬驗證系統覆蓋率分析的方法,所述方法包括:
S1、調用核接口函數CompECPUGetCovData(),SPARC核生成disassembly.dat、disassembly.txt文件,ARM核時只生成disassembly.dat文件;其中disassembly.txt為所有指令的執行序列記錄,disassembly.dat為虛擬驗證系統生成的中間代碼執行歷史記錄文件;
S2、判斷當前是否是ARM核,是ARM核則調用disassembly(elf_path)函數,生成disassembly.txt文件;
S3、打開disassembly.txt、all_c_file.txt、assemble.s文件,其中,assemble.s是自動生成的匯編源文件;
S4、從disassembly.txt文件中讀取一行數據,從中取得PC值、指令值、匯編指令,獲取PC值對應的符號表信息;
S5、判斷disassembly.txt文件是否已經讀取完畢,讀取完畢執行S6,否則執行S11;
S6、判斷當前C源文件指針是否有效,當前C臨時文件指針是否有效,如二者皆有效則將當前源文件中剩下的C語句都寫入臨時C文件中;
S7、關閉disassembly.txt、all_c_file.txt、assemble.s、當前打開的源文件、當前臨時C文件;
S8、逐行讀取disassembly.dat文件內容,將每一行信息存入text_record結構體中,并將每一個結構體都串聯起來,組成結構體鏈表;
S9、調用函數GenerateReport(),生成報告;
S10、覆蓋率分析命令執行完畢;
S11、接步驟S5,判斷當前PC只對應的文件是否為C文件,不是執行S12,是執行S13;
S12、將當前的匯編指令信息寫入assemble.s文件中并讀取下一指令PC值,獲取對應的符號表信息,再回到S5;
S13、判斷當前符號表信息中對應的C源文件是否為新的C文件,不是執行S14,是執行S15;
S14、將PC值對應的C語句行號之前的源文件中的語句都寫入臨時C文件中,再回到S5;
S15、判斷當前C源文件指針是否有效,當前C臨時文件指針是否有效,如二者皆有效則將當前源文件中剩下的C語句都寫入臨時C文件中;
S16、關閉當前C源文件和臨時C文件,打開新的源文件和臨時C文件,再回到S14。
附圖說明
圖1是覆蓋率分析模塊與虛擬驗證系統的交互的交互示意圖;
圖2是disassembly.txt內視圖;
圖3是disassembly.dat內視圖;
圖4是assemble.s內視圖;
圖5是臨時C文件內視圖;
圖6是本發明實現虛擬驗證系統覆蓋率分析的方法流程圖;
圖7是覆蓋率分析報告-文件匯總信息示意圖;
圖8是覆蓋率分析報告-匯編指令分析與源文件逐個分析示意圖;
圖9是覆蓋率分析報告-代碼混合視圖執行歷史分析示意圖。
具體實施方案
下面通過具體實施方式結合附圖對本發明作進一步詳細說明。
虛擬驗證系統通過對嵌入式硬件系統進行模擬,為嵌入式軟件提供了測試軟平臺,無需相應的硬件即可對軟件進行測試與調試。使用系統起初,用戶需要按照硬件需求,在系統組件庫中選取相應的虛擬處理器型號、虛擬設備型號,通過相關參數配置,搭建所需的板級硬件虛擬系統實例。系統配置完成后,用戶可將編譯好的可執行文件通過系統工具鏈加載到系統實例中虛擬執行,并通過寄存器訪問、內存數據訪問、變量訪問、斷點、單步執行等調試功能,進行對測試代碼的調試工作。
在虛擬執行過程中,用戶可以實用覆蓋率分析功能來對已仿真執行的用戶代碼進行指令執行次數統計、分支跳轉情況統計、代碼覆蓋率分析等操作。其中涉及的用戶操作就是設置覆蓋率分析起始點,以及選擇報告生成目錄,系統將自動從分析起始點開始,進行代碼的覆蓋率分析,并在指定目錄生成相關分析報告。
覆蓋率分析模塊是作為虛擬驗證系統的輔助測試模塊存在,它的執行需要與虛擬驗證系統相互配合,具體交互過程如附圖所1所示:1)用戶設置覆蓋率代碼起始點,虛擬驗證系統的GDB模塊將根據用戶設置完成相關代碼段的執行標記;2)在虛擬驗證系統仿真執行過程中,將根據代碼段的執行標記來判斷是否需要進行覆蓋率分析。若需要,則記錄執行歷史并生成專有的中間代碼執行歷史記錄文件,其格式見表1;3)在用戶選擇報告生成路徑之后,覆蓋率分析模塊將根據自有方法以中間代碼執行歷史記錄文件等為依據,生成最終覆蓋率分析報告。
表1中間代碼執行歷史記錄文件格式
在介紹本發明的虛擬驗證系統下覆蓋率分析的實現方法之前,先介紹覆蓋率分析模塊實現過程中涉及的核心接口設計、數據結構設計以及幾個臨時文件內視圖。
1)覆蓋率分析模塊接口設計:在生成覆蓋分析過程中,將涉及如表2所示的各種接口。
表2覆蓋率分析模塊接口設計
2)覆蓋率分析模塊涉及的核心數據結構如表3所示。
表3覆蓋率分析模塊涉及的核心數據結構
3)覆蓋率分析模塊涉及的臨時文件內視圖:
disassembly.txt/disassembly.dat:虛擬內核調用CompECPUGetCovData()函數或disassembly()函數時生成,分別對應附圖6中的操作a和操作b。其中,如附圖2所示,disassembly.txt為所有指令的執行序列記錄,如附圖3所示,disassembly.dat為虛擬驗證系統生成的中間代碼執行歷史記錄文件。disassembly.dat文件的格式,可參照“表1中間代碼執行歷史記錄文件格式”所示。如附圖4所示的assemble.s是自動生成的匯編源文件,對應附圖6中的操作c。
如附圖5所示的臨時C文件(xxxxxx.c)是每一個.c文件對應一個臨時C文件,由附圖6中的操作d、e共同完成。第一列行號為在當前臨時文件中的行號,第二列小數點之前的行號為C語句或者匯編語句對應的源碼在源文件中的行號,小數點之后為上一條C語句對應的匯編語句的行號。
本發明實現虛擬驗證系統覆蓋率分析的方法流程如附圖6所示,主要包括以下幾步:
1)調用核接口CompECPUGetCovData("disassembly.dat"),SPARC核生成disassembly.dat、disassembly.txt文件,ARM核時只生成disassembly.dat文件,文件內容分別如圖2、圖3所示;
2)判斷當前是否是ARM核,是ARM核則調用disassembly(elf_path)函數,生成disassembly.txt文件;
3)打開disassembly.txt、all_c_file.txt、assemble.s文件;
4)從disassembly.txt文件中讀取一行數據,從中取得PC值、指令值、匯編指令,獲取PC值對應的符號表信息;
5)判斷disassembly.txt文件是否已經讀取完畢,讀取完畢執行步驟6,否則執行步驟11;
6)判斷當前C源文件指針是否有效,當前C臨時文件指針是否有效,如二者皆有效則將當前源文件中剩下的C語句(包括空行、注釋行)都寫入臨時C文件中;
7)接上一步,關閉disassembly.txt、all_c_file.txt、assemble.s、當前打開的源文件、當前臨時C文件;
8)接上一步,逐行讀取disassembly.dat文件內容,將每一行信息存入text_record結構體中,并將每一個結構體都串聯起來,組成結構體鏈表;
9)接上一步,調用GenerateReport函數,生成報告;
10)覆蓋率分析命令執行結束;
11)接步驟5,判斷當前PC只對應的文件是否為C文件,不是執行不走12,是執行步驟13;
12)將當前的匯編指令信息(PC值、指令值、匯編指令)寫入assemble.s文件中并讀取下一指令PC值,獲取對應的符號表信息,再回到步驟5;
13)判斷當前符號表信息中對應的C源文件是否為新的C文件(與之前的C文件是否是同一文件),不是執行步驟14,是執行步驟15;
14)將PC值對應的C語句行號之前的源文件中的語句都寫入臨時C文件中,再回到步驟5;
15)同步驟6;
16)接上一步,關閉當前C源文件和臨時C文件,打開新的源文件和臨時C文件,再回到步驟14。
在上述步驟中,會使用GDB提供的“PC值獲取符號表”接口操作。描述如表4所示。
表4 GDB提供的“PC值獲取符號表”接口操作
附圖7-9為生成的覆蓋率分析報告示例,其中,附圖7是覆蓋率分析報告-文件匯總信息,附圖8展示了覆蓋率分析報告-匯編指令分析與源文件逐個分析,附圖9是覆蓋率分析報告-代碼混合視圖執行歷史分析。
綜上所述,本發明提供了一種實現虛擬驗證系統覆蓋率分析的方法,包括:調用核接口函數生成disassembly.dat、disassembly.txt文件;打開disassembly.txt、all_c_file.txt、assemble.s文件;從disassembly.txt文件中讀取一行數據,從中取得PC值、指令值、匯編指令,獲取PC值對應的符號表信息;判斷disassembly.txt文件是否已經讀取完畢,讀取完畢則判斷當前C源文件指針是否有效,當前C臨時文件指針是否有效,如二者皆有效則將當前源文件中剩下的C語句都寫入臨時C文件中;關閉disassembly.txt、all_c_file.txt、assemble.s、當前打開的源文件、當前臨時C文件;逐行讀取disassembly.dat文件內容,將每一行信息存入text_record結構體中,并將每一個結構體都串聯起來,組成結構體鏈表;調用函數GenerateReport(),生成報告;覆蓋率分析命令執行完畢。本發明能夠對已仿真執行的用戶代碼進行指令執行次數統計、分支跳轉情況統計、代碼覆蓋率分析等操作。
以上內容是結合具體的優選實施方式對本發明所作的進一步詳細說明,不能認定本發明的具體實施只局限于這些說明。對于本發明所屬技術領域的普通技術人員來說,在不脫離本發明構思的前提下,還可以做出若干簡單推演或替換,都應當視為屬于本發明的保護范圍。