一种实现虚拟验证系统覆盖率分析的方法与流程

文档序号:12665668阅读:416来源:国知局
一种实现虚拟验证系统覆盖率分析的方法与流程

本发明涉及虚拟验证系统仿真技术领域,尤其涉及一种实现虚拟验证系统覆盖率分析的方法。



背景技术:

虚拟验证系统是能够对嵌入式硬件系统进行完整模拟的软件系统。用户可以在该系统上模拟运行嵌入式软件,无需相应的硬件即可对嵌入式软件进行测试与调试。通过使用虚拟验证系统,用户不仅可以极大地缩短嵌入式软件研制周期,而且能够避免高昂的辅助测试硬件研制费用、极大地降低系统成本。产品可以广泛应用于航空、航天、武器装备、汽车、机器人、工业控制等嵌入式系统开发领域,提升这些行业的劳动生产效率、降低成本、增强产品的竞争能力。

虚拟验证系统在提供纯软件模拟板级硬件测试环境的基础上,提供了大量的辅助调试测试手段,包括暂停仿真执行、断点设置、下一步执行(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(),生成报告;覆盖率分析命令执行完毕。本发明能够对已仿真执行的用户代码进行指令执行次数统计、分支跳转情况统计、代码覆盖率分析等操作。

以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1