连续捕获程序异常的处理器异常测试方法
【技术领域】
[0001]本发明涉及计算机技术领域,具体涉及一种连续捕获程序异常的处理器异常测试方法。
【背景技术】
[0002]目前国内外公开的针对处理器异常的测试方法,大都是基于软件层面的,而Intel、IBM等各大处理器厂商基本没有公开发布针对该项内容专门进行测试与验证的相关方法。针对异常捕获以及校验的工作,大多是在操作系统级或者在各类编程开发工具内部实现的,其实现方式有一个共性的特点就是,在捕获到异常之后,由操作系统向用户报告异常、忽略异常、或者按照程序预设的异常处理方式进行处理之后,终止程序执行。C++与JAVA均等面向对象语言还提供捕获多个用户异常支持,但是异常发生时,用户程序一般会终止执行。
[0003]现有技术的这种异常处理机制与方法,很少提及对异常处理机制本身的正确性进行相关校验。而且前述异常处理并没有针对处理器指令一级异常进行覆盖,更加达不到处理器异常测试覆盖率的需求,这不满足处理器正确性验证与测试中异常测试的要求;同时通常情形下,异常发生时存在用户程序终止的现象,导致异常测试的校验和异常测试程序的管理工作不易开展。
【发明内容】
[0004]本发明所要解决的技术问题是针对现有技术中存在上述缺陷,提供一种连续捕获程序异常的处理器异常测试方法,其基于异常功能点覆盖率的,能够对用户程序中连续多个异常的捕获与校验,能够进行批量异常测试、验证与管理。而且该方法是在用户层一级实现的,考虑了处理器指令集异常点的全覆盖。
[0005]根据本发明,提供了一种连续捕获程序异常的处理器异常测试方法,包括:确定并初始化需要进行校验的异常类型以及捕获到的结果异常类型;根据需要进行校验的异常类型以及捕获到的结果异常类型,设定用户层需要获取的异常类型;根据设定的异常类型的处置方式,设置异常发生时结果校验变量的异常类型值;按照遍历所有指令分类以及每类指令所包含的异常类型值的方式,编写涵盖所有指令类型的异常测试用例的集合;将所述集合中的异常测试用例以函数的形式进行组织,以形成异常函数列表;针对异常函数列表中的每个函数,对函数进行调用并进行异常的捕获及处理以获取异常类型结果值;根据异常函数列表对应的异常类型校验值、以及异常运行过程中获取的异常类型结果值,将两者进行比较以检验处理器异常处理结果。
[0006]优选地,所述的连续捕获程序异常的处理器异常测试方法还包括:细化浮点异常分类,在浮点异常发生时获取浮点寄存器的部分异常标志位值,提取浮点异常详细信息,设置浮点异常结果校验的异常类型值。
[0007]优选地,在所述对函数进行调用并进行异常的捕获及处理以获取异常类型结果值的步骤中,利用vfork函数,将目标函数以vfork子进程的方式进行调用与运行,在子进程发生异常进入用户异常处理程序时,再由父进程向子进程发送SIGKILL,从而回到异常测试框架控制程序。
[0008]优选地,如果异常类型校验值与异常类型结果值一致,则判定处理器异常处理结果没有错误。
【附图说明】
[0009]结合附图,并通过参考下面的详细描述,将会更容易地对本发明有更完整的理解并且更容易地理解其伴随的优点和特征,其中:
[0010]图1示意性地示出了根据本发明优选实施例的连续捕获程序异常的处理器异常测试方法的流程图。
[0011]需要说明的是,附图用于说明本发明,而非限制本发明。注意,表示结构的附图可能并非按比例绘制。并且,附图中,相同或者类似的元件标有相同或者类似的标号。
【具体实施方式】
[0012]为了使本发明的内容更加清楚和易懂,下面结合具体实施例和附图对本发明的内容进行详细描述。
[0013]本发明提供一种基于用户层的能够连续捕获程序异常的处理器异常测试方法和框架,可用于连续捕获单个用户程序运行过程中报出的多个异常,还可以用于制造指定异常并验证处理器异常处理机制正确性,对于验证处理器功能正确性起到重要的辅助补充作用。
[0014]如图1所示,本发明实施例中描述的一种基于用户层的能够连续捕获程序异常的处理器异常测试方法包括:
[0015]第一步骤S1:确定并初始化需要进行校验的异常类型以及捕获到的结果异常类型;
[0016]第二步骤S2:利用信号以及信号处理机制,根据需要进行校验的异常类型以及捕获到的结果异常类型,设定用户层需要获取的异常类型;
[0017]第三步骤S3:根据第二步骤S2中设定的异常类型的处置方式,设置异常发生时结果校验变量的异常类型值;
[0018]第四步骤S4:细化浮点异常分类;
[0019]其中,在第四步骤S4中,在浮点异常发生时获取浮点寄存器的部分异常标志位值,提取浮点异常详细信息,设置浮点异常结果校验的异常类型值。
[0020]需要说明的是,之所以能够对浮点异常进行细化,原因在于处理器内部通常有用户可以读写的浮点异常,相应的浮点异常信息可以被用户轻易地获取到;而其他异常则没有这个特征或者不容易进行细化。
[0021]第五步骤S5:根据遍历指令分类以及每类指令所包含的异常类型值的原则,即按照遍历所有指令分类以及每类指令所包含的异常类型值的方式,编写涵盖所有指令类型的异常测试用例的集合;
[0022]在第五步骤S5中,既可以以函数形式也可以以程序形式进行封装异常测试用例的集合;在异常测试用例的集合中,每个可能发生异常的程序段(目标程序段)要么写在单个函数中,要么是在某个函数中进行调用。这里需要预先对可能发生的异常类型进行设定,便于异常测试框架中进行后续异常的捕获与校验。
[0023]第六步骤S6:将第五步骤中的异常测试用例以函数的形式进行组织,以形成异常函数列表;这里仅对需要进行异常校验的函数进行组织。
[0024]第七步骤S7:按照指定原则选择第六步骤中组织的函数列表中的一个函数进行调用并进行异常的捕获及处理以获取异常类型结果值。
[0025]有序地,在第七步骤S7中,具体的处置机制是利用vfork()函数机制,利用vfork机制中支持父进程与子进程采用完全共享的代码段、数据段、堆栈段的特征,为框