连续捕获程序异常的处理器异常测试方法

来源:互联网 发布:下载应用的软件 编辑:程序博客网 时间:2024/05/28 15:27
摘要

一种连续捕获程序异常的处理器异常测试方法,包括:确定并初始化需要进行校验的异常类型以及捕获到的结果异常类型;设定用户层需要获取的异常类型;根据设定的异常类型的处置方式,设置异常发生时结果校验变量的异常类型值;按照遍历所有指令分类以及每类指令所包含的异常类型值的方式,编写涵盖所有指令类型的异常测试用例的集合;将所述集合中的异常测试用例以函数的形式进行组织,以形成异常函数列表;针对异常函数列表中的每个函数,对函数进行调用并进行异常的捕获及处理以获取异常类型结果值;根据异常函数列表对应的异常类型校验值、以及异常运行过程中获取的异常类型结果值,将两者进行比较以检验处理器异常处理结果。

权利要求(4)
1.一种连续捕获程序异常的处理器异常测试方法,其特征在于包括: 确定并初始化需要进行校验的异常类型以及捕获到的结果异常类型; 根据需要进行校验的异常类型以及捕获到的结果异常类型,设定用户层需要获取的异常类型; 根据设定的异常类型的处置方式,设置异常发生时结果校验变量的异常类型值; 按照遍历所有指令分类以及每类指令所包含的异常类型值的方式,编写涵盖所有指令类型的异常测试用例的集合; 将所述集合中的异常测试用例以函数的形式进行组织,以形成异常函数列表; 针对异常函数列表中的每个函数,对函数进行调用并进行异常的捕获及处理以获取异常类型结果值; 根据异常函数列表对应的异常类型校验值、以及异常运行过程中获取的异常类型结果值,将两者进行比较以检验处理器异常处理结果。
2.根据权利要求1所述的连续捕获程序异常的处理器异常测试方法,其特征在于还包括:细化浮点异常分类,在浮点异常发生时获取浮点寄存器的部分异常标志位值,提取浮点异常详细信息,设置浮点异常结果校验的异常类型值。
3.根据权利要求1或2所述的连续捕获程序异常的处理器异常测试方法,其特征在于,在所述对函数进行调用并进行异常的捕获及处理以获取异常类型结果值的步骤中,利用vfork函数,将目标函数以vfork子进程的方式进行调用与运行,在子进程发生异常进入用户异常处理程序时,再由父进程向子进程发送SIGKILL,从而回到异常测试框架控制程序。
4.根据权利要求1或2所述的连续捕获程序异常的处理器异常测试方法,其特征在于,在第九步骤中,如果异常类型校验值与异常类型结果值一致,则判定处理器异常处理结果没有错误。
说明
连续捕获程序异常的处理器异常测试方法

技术领域

[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机制中支持父进程与子进程采用完全共享的代码段、数据段、堆栈段的特征,为框架中进行统计异常结果与异常比较提供了基础。其中,将可能发生异常的函数以vfork子进程的方式进行调用与运行,在子进程发生异常进入用户异常处理程序时,再由父进程向子进程发送SIGKILL,从而回到异常测试框架控制程序;如此能够在不中断用户程序执行的情况下,继续用户程序的后续运行;操作系统在运行时将根据之前预设的用户异常处理机制对程序发生的异常进行处置,同时设置异常结果校验值,用于后续异常结果校验。

[0026]第八步骤S8:判断是否已经针对异常函数列表中的所有函数执行完第七步骤,如果判定结果是否定结果则跳转至第七步骤,如果判定结果是肯定结果则跳转至第九步骤;

[0027]实际上,图1所示的第七步骤S7和第八步骤S8共同实现了针对异常函数列表中的每个函数,对函数进行调用并进行异常的捕获及处理以获取异常类型结果值。

[0028]第九步骤S9:根据第六步骤中异常函数列表对应的异常类型校验值,以及第七步骤中异常运行过程中获取的异常类型结果值,将两者进行比较以检验处理器异常处理结果。具体地说,例如,如果异常类型校验值与异常类型结果值一致,则判定处理器异常处理结果没有错误。

[0029]根据本发明的基于用户层的连续捕获程序异常的处理器异常测试方法与框架关键点有三处:一是第四步骤,将浮点异常进行细分,便于确定用户程序中浮点异常的详细分类,对于处理器浮点异常的处理机制能够直接的进行验证;二是连续获取单个程序中可能发生的多个异常,包括了第六步骤、第七步骤、第八步骤三个步骤,将异常测试用例以函数的形式进行组织,采用vfork机制以子进程方式进行异常函数调用、然后vfork父进程杀死已经进入异常处理机制的子进程,达到不间断用户程序运行的效果,最后以列表方式调用多个用户异常测试用例的形式实现异常的连续捕获;三是进行处理器异常测试用例的校验,包括第三步骤、第五步骤、第九步骤,具体是编写异常测试用例时预设异常类型校验值,利用vfork机制中支持父进程与子进程采用完全共享的代码段、数据段、堆栈段的特征,将利用父子进程共享变量的方式存储异常捕获时的异常分类,最后比较异常登记与异常预设值是否一致,验证处理器异常处理机制的正确性。

[0030]根据以上技术方案可以看出,本发明的具有以下优点:用户能够根据本发明的方法和框架,将异常测试程序以具有自校验功能的普通测试程序的形式进行组织和运行,从而能够将异常测试程序像普通测试程序那样在处理器上进行批量的测试与结果校验,是对处理器功能验证的一种有效补充;该发明还细化了浮点异常类型,能够验证浮点异常登记的正确性;此外,该技术是基于用户层进行实现的,不需要操作系统和编译的做任何的修改,简单易行。

[0031]此外,需要说明的是,除非特别指出,否则说明书中的术语“第一”、“第二”、“第三”等描述仅仅用于区分说明书中的各个组件、元素、步骤等,而不是用于表示各个组件、元素、步骤之间的逻辑关系或者顺序关系等。

[0032]可以理解的是,虽然本发明已以较佳实施例披露如上,然而上述实施例并非用以限定本发明。对于任何熟悉本领域的技术人员而言,在不脱离本发明技术方案范围情况下,都可利用上述揭示的技术内容对本发明技术方案作出许多可能的变动和修饰,或修改为等同变化的等效实施例。因此,凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所做的任何简单修改、等同变化及修饰,均仍属于本发明技术方案保护的范围内。


0 0
原创粉丝点击