指令执行设备、调试方法、调试设备以及调试程序的制作方法

文档序号:6558481阅读:147来源:国知局
专利名称:指令执行设备、调试方法、调试设备以及调试程序的制作方法
技术领域
本发明涉及一种调试辅助技术,特别是涉及使用一种调试功能的软件中断技术在包括条件指令的程序中设置断点的技术。
背景技术
近几年开发的处理器能够执行将指令的执行条件指定至该指令本身的条件指令。
当调试可由处理器执行的程序时,可使用软件中断技术在程序中设置断点。软件中断技术为将位于设置为断点的位置上的指令重写到中断指令(一种类型的调试指令)中以执行中断处理的技术。断点为指令位置,在作为调试对象的程序执行过程中,该程序在此处被挂起(suspend)。
根据软件中断技术,将指令存储器中的任意指令重写入中断指令中,并且由在其指令集中具有中断指令的处理器、模拟处理器功能的仿真器等执行该中断指令。
处理器、仿真器等从指令存储器中读取指令,解码所读取的中断指令,并且通过执行所解码的中断指令而产生中断并挂起程序的执行。
然而,当使用软件中断技术执行在条件指令处设置有断点的程序时,如果读取到中断指令,则即使由中断指令指定的执行条件没有满足,传统的处理器或类似的处理器也会产生中断并挂起程序的执行。
作为解决上述问题的一种方法,公开号为H11-341077的日本专利申请公开了以下中断控制方法。当处理器执行中断指令并且发生中断时,调试设备判断在条件指令重写入中断指令之前,是否满足该条件指令的执行条件,并且如果判断结果为执行条件未得到满足,则处理器重新开始执行该程序。
在程序开发中希望减少调试所需的时间,以提高效率。
然而,使用已描述的中断控制方法,每当程序的执行停止在断点处时,调试设备会介入。由于调试设备的介入是阻碍减少调试所需时间的一个因素,故所述中断控制方法不能有效地响应程序开发中的需求。

发明内容
考虑到所述问题,本发明的目的是提供一种能够减少用于调试可执行程序所需时间的指令执行设备,在可执行程序中,使用软件中断技术在条件指令处设置有断点,而不需要调试设备的介入。本发明进一步的目的是提供用于在包括条件指令的程序中设置断点的调试方法、调试设备和调试装置。
为了实现所述目的,本发明提供了一种执行存储在存储设备中的指令的指令执行设备,其包括用于存储作为指令执行结果的值的存储单元;用于执行中断指令执行的调试指令的执行单元;识别单元,用于从构成调试指令的位序列中识别条件表达式,该条件表达式使用作为操作数存储在存储单元中的数值;和判断单元,用于通过参考存储在存储单元中的值而判断被识别的条件表达式是真或者假,其中当条件表达判断为假时,执行单元禁止调试指令的执行。
这里,指令执行设备例如是处理器、模拟处理器的仿真器或者模拟处理器操作的模拟器。
所述指令执行设备在没有调试设备介入的情况下,根据条件指令的执行条件表达式为真或者假而判断是否停止调试。因此,与传统的中断控制方法相比,可减少调试所花费的时间,并且能够以提高的效率执行调试。
在所述的指令执行装置中,调试指令在长度上可能比指令执行设备的指令集中长度最短的指令短。
根据所述的结构,在使用软件中断技术设置断点时,可以避免没有作为重写对象的指令的错误重写。
本发明的调试方法在可以由上述指令执行设备解码和执行过的程序中设置断点,该方法包括判断在被设为断点的位置处的指令是否为条件指令;并且当判断结果是在被设置为断点的位置处的指令是条件指令时,将该条件指令重写到一调试指令中,该调试指令指定了与该条件指令的执行条件相同的执行条件。
本发明的调试设备在可以由上述指令执行设备解码和执行过的程序中设置断点,该调试设备包括判断单元,用于判断被设置为断点的位置处的指令是否为条件指令;重写单元,用于当判断结果是被设置为断点的位置处的指令是条件指令时,将该条件指令重写到一调试指令中,该调试指令指定了与该条件指令的执行条件相同的执行条件。
本发明的调试程序在可以由上述指令执行设备解码和执行过的程序中设置断点,该调试程序包括判断步骤,判断被设置为断点的位置处的指令是否为条件指令;重写步骤,当判断结果是被设置为断点的位置处的指令是条件指令时,将该条件指令重写到一调试指令中,该调试指令指定了与该条件指令的执行条件相同的执行条件。
所述调试方法、调试设备和调试程序都将设置为断点的位置处的条件指令重写入一调试指令,该调试指令具有与该条件指令的执行条件相同的执行条件。当指令执行装置执行重写的条件指令所属的程序的调试时,在没有外部源诸如调试设备介入的情况下,该指令执行设备根据调试指令的执行条件表达式为真或者假来判断是否执行中断程序。因此,与传统的中断控制方法相比,可以减少调试所花费的时间,并且能够以提高的效率执行调试。
所述调试方法可进一步包括当判断结果是设置为断点的位置处的指令是条件指令时,基于位于该条件指令之前位置处的指令,是否可能预测该条件指令的执行条件是否满足的预测,并且当判断结果是不可能预测时,通知用户该预测是不可能的。
根据所述的方法,当不能预测要设置断点处的条件指令的执行条件是否将得到满足时,告知用户该预测是不可能的。因此,用户能够考虑到这一提示而重新设置断点。
所述调试方法进一步包括当判断结果是设置为断点的位置处的指令是条件指令时,基于该条件指令之前位置处的指令判断是否可能预测该条件指令的执行条件是否满足的预测,当判断结果是不可能预测时,在位于该条件指令之后的一条或多条指令中查找最接近该条件指令的指令,并且所述一条或多条指令为(a)具有不同于该条件指令的执行条件的第二条件指令,和(b)没有条件的无条件指令中的一种,并且将作为查找结果找到的指令位置设置为预备断点。
根据所述的方法,除了要作为断点的条件指令的位置外,一条或多条查找到的指令的位置也被设置为断点。因此,在设置有断点的程序调试中,即使调试的执行没有停止在要作为断点的条件指令的位置处,调试仍能停止在随后的查找到的指令的位置处。
所述调试方法可进一步包括当判断结果是设置为断点的位置处的指令是条件指令时,查找一条或多条位于该条件指令之后的指令,并且且这样的一条或多条指令为(a)具有多个执行条件中任何一个的条件指令和(b)没有条件的无条件指令中的一种,并且将作为查找结果找到的一条或多条指令的各位置设置为断点候选位置。
根据所述的方法,除了要作为断点的条件指令的位置外,也将查找到的一条或多条指令的位置设置为断点。因此,在设置有断点的程序的调试中,即使调试的执行没有停止在要作为断点的条件指令的位置处,该调试仍能停止于随后的查找到的指令的位置处。
所述调试方法可进一步包括当设置为断点的位置处的指令是子程序中的条件指令时,判断查找中的查找位置是否为该子程序的结束位置,并且当判断结果是该查找位置是子程序的结束位置时,结束该查找。
根据所述的方法,当子程序中的条件指令的位置被设置为断点,并且该条件指令之外的指令位置被设置为断点时,可以在不超过子程序边界的范围内可以执行对要被设置为断点的指令位置的查找。
所述调试方法可进一步包括判断查找中的查找位置处的条件指令的执行条件是否是查找中在先找到的条件指令的执行条件的相反条件,并且当位于查找位置处的条件指令的执行条件是在先找到的条件指令的执行条件的相反条件时,结束该查找。
根据所述方法,指定特定执行条件的条件指令的位置以及具有与特定执行条件相反的执行条件的条件指令的位置都被设置为断点,以确保停止调试。这意味着如果能够找到指定特定执行条件的条件指令和具有与该特定执行条件相反的执行条件的条件指令,则查找可以结束。因此,可减少冗余的查找处理。


从以下与解释本发明具体实施例的附图结合的说明中,本发明的这些和其它目的、优点以及特征将变得显而易见。
在附图中图1是表示按照本发明实施方式的调试辅助系统整体结构的结构图;
图2是表示图1中主机结构的结构图;图3是表示图2中调试单元功能的功能结构图;图4是表示图1中的评估板结构的结构图;图5是表示图4的处理器的32位指令格式;图6是表示执行条件之间的关系;图7是表示图4的处理器的32位中断指令格式;图8是表示ARM处理器的ARM代码中的中断指令格式;图9是表示图4的处理器的16位扩展指令格式;图10是表示与图4的处理器的扩展指令相对应的16位中断指令格式;图11是表示ARM处理器的THUMB代码中的中断指令格式;图12是表示图4的处理器的流水线结构;图13是表示断点设置处理的操作流程的流程图;图14是表示中断指令重写处理的操作流程的流程图;图15示出了部分源程序;图16示出了与图15的源程序相对应的部分调试信息;图17示出了其中设置有断点的部分调试信息;图18是表示中断处理的操作流程的流程图;图19是表示可预测性判断处理的操作流程的流程图;图20是表示查找预备断点的查找处理的操作流程的流程图;图21是表示查找预备断点的查找处理的操作流程的流程图;图22示出了条件查找表;图23示出了部分源程序;图24示出了与图23的源程序相对应的部分调试信息;以及图25示出了其中设置有断点的部分调试信息。
具有实施方式下面结合

本发明的实施方式。
结构整体结构下面参考图1描述按照本发明实施方式的调试辅助系统的整体结构。图1是表示本发明实施方式的调试辅助系统整体结构的结构图。
调试辅助系统1由主机2、评估板3和连接电缆4组成,主机2和评估板3通过连接电缆4连接。
主机2中的处理器具有在可执行程序中设置断点的功能,该可执行程序为使用软件中断技术调试的对象。该处理器或者根据用户指令或者自动地设置断点。当设置断点时,如果将可执行程序中条件指令的位置设置为断点,则处理器将设置位置处的条件指令重写入条件中断指令,该条件中断指令的执行条件为该条件指令的执行条件。
根据来自用户的执行调试的指令,主机2中的处理器使评估板3中的处理器31执行其中设置有断点的可执行程序的调试。
执行作为调试对象的可执行程序的处理器31安装在评估板3中。
一旦在可执行程序的调试期间读取到条件中断指令,处理器31就判断条件中断指令的执行条件表达式是真还是假。如果判断结果为执行条件表达式是真,则处理器31执行中断操作并挂起调试,如果判断结果为执行条件表达式是假,则继续调试。
主机2的结构下面参考图2说明图1中主机2的结构。图2是表示图1的主机2结构的结构图。
主机2由存储单元21、输入/输出设备22、处理器23、IF(接口)单元24以及总线25组成。
存储单元21在其中存储各种控制程序和其它软件。存储单元21还在其中存储源程序21A、可执行程序21B以及调试信息21C。
输入/输出设备22由输入设备和输出设备组成,输入设备为键盘、定位设备等类似设备,输出设备为显示器、扬声器等类似设备。
处理器23作为程序转换单元23A、调试单元23B等工作。
根据来自输入/输出设备22的信号,程序转换单元23A将存储在存储单元21中的源程序转换为可由计算机执行格式的可执行程序,并在存储单元21中存储该可执行程序。当将源程序转换为可执行程序21B时,该程序转换单元23A产生助忆性表示该可执行程序的调试信息,并在存储单元21中存储该调试信息。
调试单元23B参考存储单元21中的源程序、可执行程序和调试信息,在可执行程序中设置断点。当设置断点时,调试单元21B执行指令重写处理。该指令重写处理包括以下操作,即如果在设置为断点的位置处的指令为条件指令,则将该条件指令重写到执行条件为该条件指令的执行条件的条件中断指令中。
调试单元23B还执行与调试辅助相关的其它处理,诸如使评估板3中的处理器31执行其中设置有断点的可执行程序。
IF单元24具有作为在主机2和评估板3之间传递信号的媒介的功能。
调试单元23B下面参考图3说明图2的调试单元23B的功能。图3是表示图2的调试单元23B功能的功能方块图。
调试单元23B由输入/输出处理单元61、读取处理单元62、指令参考/修改处理单元63、执行/停止控制处理单元64、调试信息查找处理单元65以及断点设置处理单元66组成。
输入/输出处理单元61执行的处理包括来自输入/输出设备22的信号的接收处理以及至输入/输出设备22的信号的输出处理。
读取处理单元62从存储单元21中读取可执行程序和调试信息。
指令参考/修改处理单元63基于由输入/输出处理单元61接收的信号内容(执行调试的人员利用输入/输出设备22输入的内容),参考或修改由读取处理单元62读取的可执行程序和调试信息中的期望指令。
执行/停止控制处理单元64自动地或者基于由输入/输出处理单元61接收的信号内容(执行调试的人员利用输入/输出设备22输入的内容)使处理器31执行或停止调试。
调试信息查找处理单元65具有自动地或者基于由输入/输出处理单元61接收的信号内容(执行调试的人员利用输入/输出设备22输入的内容)从调试信息中查找期望指令的功能。
断点设置处理单元66具有自动地或者基于由输入/输出处理单元61接收的信号内容(执行调试的人员利用输入/输出设备22输入的内容)在特定的指令位置设置断点的功能。
评估板3的结构下面参考图4说明图1的评估板3。图4是表示图1的评估板3结构的结构图。
评估板3由处理器31、存储器32、IF单元33、以及总线34构成,处理器31、存储器32、IF单元33通过总线34连接。
存储器32在其中存储有作为调试对象的可执行程序等。
IF单元33具有作为在评估板3和主机2之间传递信号的媒介的功能。
处理器31中的状态寄存器(标志寄存器)36在其中存储有状态标志,该状态标志表示六个执行条件(后述)中每一个的满足状态。
处理器31在存储器32中存储可执行程序,该可执行程序为通过IF单元33从主机2接收的调试对象。在调试单元23B的控制下,处理器31从存储器32中读取可执行程序,且执行对该读取的可执行程序的调试。一旦在调试期间读取到条件中断指令,处理器31就参考状态寄存器36以判断条件中断指令的执行条件是否满足。如果判断结果是满足执行条件,则处理器31执行中断处理以挂起调试,并且如果判断结果是不满足条件,则继续调试。
当处理器31挂起调试时,调试单元23B及时读取存储在处理器31的寄存器中的值以及存储在存储器32中的数据,并向输入/输出设备22输出所读取的信息,从而向编程者通知该信息。
处理器31具有RISC(精简指令集计算机)指令集架构,该架构在指令集中包括条件指令。处理器31的基本结构与ARM(高级RISC机器)处理器相同,该ARM处理器为在其指令集中具有条件指令的RISC处理器的代表。
处理器31不同于传统的ARM处理器,这是由于其指令集包括有其执行指令为条件指令的执行指令的条件中断指令,并且如果满足条件中断指令的执行条件,则其在调试期间执行中断处理。
指令格式(32位指令格式)下面参考图5说明处理器31的32位指令格式。图5表示处理器31的32位指令格式。注意到,处理器31的32位指令格式与ARM处理器中使用的ARM代码基本相同。
图5中示出的由位号31至28表示的四位为显示执行条件的字段,由位号27至0表示的28位为显示指令的字段。此外,“cond”表示执行条件,并且各“x”表示可以取数值“0”或“1”的位。
例如,“cond”为“0001”表示执行条件为“ZERO”。执行条件“ZERO”意味着“如果最近执行的计算结果为‘0’则执行”。而且,“cond”为“1110”表示执行条件是无条件的,换言之,指令没有执行条件。
在处理器31的该指令集架构中,以下六个执行条件可由条件指令指定“ZERO”、“NZERO”、“CARRY”、“NCARRY”、“OVER”和“NOVER”。
“ZERO”如上所述,而“NZERO”与“ZERO”相反。
执行条件“CARRY”的意思是“如果在最近执行的计算结果中出现进位则执行”。而“NCARRY”与之相反。
执行条件“OVER”的意思是“如果最近执行的带符号数据的算术计算结果产生溢出则执行”。而“NOVER”与之相反。
注意到,所述执行条件之间的关系在图6中示出。
(32位中断指令格式)下面参考图7说明处理器31的32位中断指令格式。图7表示处理器31的32位中断指令格式。
图7中示出的位号31至28表示的四位为显示执行条件的字段(图7中该表示为“cond”的字段),由位号27至0表示的28位是显示指令的字段。位号27至0的所有位具有值“1”,表示该指令为中断指令。
为参考起见,图8示出了ARM处理器的ARM代码中的中断指令格式。从图8可以看出,在传统的中断指令格式中不存在用于指定执行条件的“cond”,而且显然不能指定执行条件。
(16位扩展指令格式)ARM处理器具有被称为16位THUMB代码的扩展指令集,并且因此,处理器31也具有16位扩展指令集。
下面参考图9说明处理器31的16位扩展指令格式。图9示出了处理器31的16位指令格式。
图9中示出的由位号11至8表示的四位为显示执行条件的字段(图9中表示为“cond”的字段),由位号15至12表示的四位以及由位号7至0表示的八位是显示指令的字段。各“x”表示可以取数值“0”或“1”的位。
(与扩展指令相对应的16位中断指令格式)
下面说明与处理器31的扩展指令相对应的16位中断指令格式。图10表示与处理器31的扩展指令相对应的16位中断指令格式。
图10中示出的由位号11至8表示的四位是显示执行条件的字段(图10中表示为“cond”的字段),由位号15至12表示的四位以及由位号7至0指示的八位是显示指令的字段。位号15至12以及位号7至0的所有位具有值1,表示该指令是中断指令。
为参考起见,图11示出了ARM处理器的THUMB代码中的中断指令格式。从图11可以看出,在THUMB代码的中断指令格式中不存在用于指定执行条件的“cond”,而且显然不能指定执行条件。
处理器31的流水线处理下面参考图12说明图4的处理器31的流水线处理。图12示出了处理器31的流水线结构。
处理器31具有五级流水线结构。这五级是IF(指令获取)级31A,用于将从存储器32读取的指令获取至与处理器31相关的指令缓冲器(未示出);DC(解码)级31B,用于解码获取至指令缓冲器中的指令;EX(执行)级31C,执行被解码的指令;MEM(存储器)级31D,访问寄存器、存储器堆栈等;以及WB(回写)级31E,向寄存器、存储器等写入指令执行结果。
当根据EX级31C、MEM级31D和WB级31E任何一个中的任意指令,与执行条件相对应的状态标志值发生变化时,该级更新状态寄存器36中的该值,并根据通知信号31a向DC级31B通知(向前)该值。
DC级31B判断被解码的指令是否为中断指令。如果判断结果为被解码的指令是中断指令,则DC级31B判断该中断指令是否为条件中断指令。如果判断结果为该解码指令是条件中断指令,则DC级31B基于字段“cond”识别该条件中断指令的执行条件是否为前述的六种执行条件之一,并且基于状态寄存器36中的状态标志,检查是否满足被识别的执行条件。
如果满足条件中断指令的执行条件,则DC级31B执行异常记录,其为中断处理的执行记录。如果不满足条件中断指令的执行条件,则EX级31C不执行被解码的条件指令。
当记录了异常时,DC级31B向IF级31A送出控制信号31b,以删除(刷新)获取至指令缓冲器中的指令。
在WB级31E中检测记录在DC级31B中的异常,一旦检测到异常,WB级31E就向IF级31A发出中断向量信号31C,并通知即将执行的下一指令的地址,从而执行中断处理。
注意到,DC级31B在被解码的指令为32位指令的情况下基于位码27至0的值,并且在被解码的指令为16位指令的情况下基于位码15至12和位码7至0的值,判断该被解码的指令是否为中断指令。而且,DC级31B在中断指令为32位指令的情况下基于位码27至0,并且在中断指令为16位指令的情况下基于位码15至12和位码7至0,判断该中断指令是否为条件中断指令。
操作断点设置处理下面参考图13说明由图3的断点设置处理单元66执行的断点设置处理。图13是表示由断点设置处理单元66执行的断点设置处理的操作流程的流程图。
断点设置处理单元66设置断点的位置(步骤S101),并在其中存储设置为断点的位置(地址)和该位置的指令(步骤S102)。
基于设置为断点位置的指令中的“cond”字段,断点设置处理单元66判断该指令是否为条件指令(步骤S103)。如果判断结果是设置为断点位置的指令是条件指令(步骤S103是),则断点设置处理单元66将条件指令重写入其执行条件为该条件指令的执行条件的条件中断指令中(步骤S104)。另一方面,如果判断结果是设为断点位置的指令不是条件指令,换言之,当指令没有执行条件时(步骤S103否),则断点设置处理单元66向不具有执行条件的无条件中断指令中重写该指令(S105)。
(步骤S104和步骤S105)下面参考图14说明在图13的步骤S104和步骤S105执行的用于重写设为断点位置的指令的中断指令重写处理。图14是表示在图13的步骤S104和步骤S105执行的中断指令重写处理的操作流程的流程图。注意到,在该实施方式中,用于将条件指令重写入条件中断指令的处理,以及用于将没有条件的指令重写入无条件中断指令的处理在算法上是相同的。
屏蔽和中断指令结构(pattern)分别提供给32位指令和16位指令,并且存储在存储单元21中。
在用于32位指令的屏蔽中,位码31至28的四位全部具有值“1”,并且位码27至0的28位全部具有值“0”。在用于32位指令的中断指令结构中,位码31至28的四位全部具有值“0”,并且位码27至0的28位全部具有值“1”。
在用于16位指令的屏蔽中,位码11至8的四位全部具有值“1”,并且其余位码具有值“0”。在用于16位指令的中断指令结构中,位码11至8的四位全部具有值“0”,并且其余位码具有值“1”。
断点设置处理单元66判断设置为断点的位置处的指令是32位指令还是16位指令(步骤S151)。
如果该指令为32位指令(步骤S151是),则断点设置处理单元66为32位指令选择屏蔽和中断指令结构(步骤S152),并用选定的屏蔽来屏蔽指令,换言之,得到指令与选定的屏蔽的逻辑积(步骤S154)。因此,位于设置为断点位置处的指令被重写入指令,以使表示执行条件的位码31至28的四位保持不变,并且使位码27至0的28位均为“0”。
接下来,断点设置处理单元66得到在步骤S154处重写的指令与中断指令结构的逻辑与,以将重写的指令重写入中断指令(S155)。因此,在步骤S154重写的指令被重写入中断指令,以使表示执行条件的位码31至28的四位保持不变,并且位码27至0的28位均为“1”。
如果该指令为16位指令(步骤S151否),则断点设置处理单元66为16位指令选择屏蔽和中断指令结构(步骤S153),并用选定的屏蔽来屏蔽指令,换言之,得到指令与选定的屏蔽的逻辑积(步骤S154)。因此,位于设置为断点位置的指令被重写入指令,以使表示执行条件的位码11至8的四位保持不变,且使所有其它位码均为“0”。
接下来,断点设置处理单元66得到在步骤S154重写的指令与中断指令结构的逻辑与,以将重写的指令重写入中断指令(步骤S155)。因此,将在步骤S154处重写的指令重写入中断指令,以使表示执行条件的位码11至8的四位保持不变,并且所有其它位码均为“1”。
(断点设置处理的具体例子1)下面参考图15至17说明当条件指令的位置被设置为断点时断点设置处理的具体例子。图15示出了部分源程序。与图15对应的图16示出了助忆性表示可执行程序的部分调试信息,当将源程序转换为可执行程序时产生该调试信息。图17示出了助忆性表示其中设置有断点的可执行程序的部分调试信息。
图15表示源代码的行号以及用C语言表达的语句。图15中源程序表示下述含义“为函数sub提供参数1并调用,将返回值代入变量r(行号10)。如果变量r的值位0,则向变量r加2(行号11至13)。”图16表示指令地址、指令的执行条件以及助忆性表达的指令。图16中的缩写指令表示下述含义“在寄存器R1(地址0x80000000)中存储1。向堆栈存储下一指令的地址,并转移至函数sub(地址0x80000004)。如果函数sub的结果位0,则将存储在寄存器R1中的值加2获得的值存储到寄存器R1(0x80000008)中。如果函数sub的结果不为0,则将寄存器R1中的值写到堆栈指针(地址0x8000000C)的值加0x10后得到的值所表示的存储地址中。”而且,在图16中,将“ZERO”指定为地址0x80000008的ADD指令的执行条件。该执行条件“ZERO”表示如果由直接在先的CALL指令调用的函数sub的结果为“0”,则应当执行该ADD指令。
图17表示当将地址0x80000008的位置设置为断点,换言之,指定“ZERO”的条件指令的位置被设置为断点时,断点设置处理单元66使地址0x80000008的执行条件“ZERO”保持不变,并且将加指令“ADD R1,2”重写至表示中断指令的“BRK”。
中断处理下面参考图18说明执行调试期间由图4的处理器31执行的中断处理。图18是表示执行调试期间由处理器31执行的中断处理的流程图。
在调试执行期间,处理器31的DC级31B判断被解码的指令是否为中断指令(S201)。如果被解码的指令不是中断指令(步骤S201否),则EX级31C不执行中断处理。另一方面,如果被解码的指令是中断指令(步骤S201是),则DC级31B判断该中断指令是否为条件中断指令(步骤S202)。
如果该指令不是条件中断指令,换言之,如果该指令为无条件中断指令(步骤S202否),则DC级31B执行异常记录,其包括IF级31A刷新存储在指令缓冲器中的指令,以及EX级31C执行中断处理(步骤S206)。
另一方面,如果该指令为条件中断指令(步骤S202是),则DC级31B识别该条件中断指令的执行条件是否为上述六种执行条件之一(步骤S203)。接下来,DC级31B参考状态寄存器36以检查识别并获得的执行条件的状态标志(步骤S204),并判断是否满足该执行条件(步骤S205)。如果满足执行条件(步骤S205是),则DC级31B执行异常记录,其包括IF级31A刷新存储在指令缓冲器中的指令,以及EX级31C执行中断处理(步骤S206)。另一方面,如果不满足执行条件(步骤S205否),则EX级31C不执行中断处理。
(效果)如上所述,通过使用处理器31以及执行断点设置处理的主机2,由于不需要诸如采用传统的中断控制方法执行仿真,所以能够减少执行调试所需的时间。因此,可以有效地进行调试。
(变型)本发明并不局限于所述的实施方式。在本发明中还包含下述情形。
可预测性判断处理当位于要设置为断点的位置(例如,用户指定为断点的位置)处的指令为条件指令时,调试单元23B可以执行处理以预测在调试期间是否会满足条件指令的执行条件。如果这是不可预测的,则调试单元23B将该结果通知给用户。
图19是表示可预测性判断处理的操作流程的流程图,其中在位于要设置为断点的位置处的指令是条件指令的情况下,调试单元23B判断是否能够预测在执行调试期间是否会满足条件指令的执行条件。注意到,可预测性判断处理基于存储在存储单元21中的调试信息而执行。
调试信息查找处理单元65将状态标志设置为“0”,其表示位于要设置为断点(步骤S301)的位置处的条件指令执行条件的状态改变。
接下来,调试信息查找处理单元65读取位于调试执行开始位置,即查找开始位置处的指令,并判断该读取的指令是否为指定作为断点位置的条件指令(步骤S302)。如果是(步骤S302是),则调试信息查找处理单元65进入到步骤S313,并且如果不是(步骤S302否),则调试信息查找处理单元65进入到步骤S303。
调试信息查找处理单元65判断位于查找位置处的指令是否为所谓的“第二条件指令”,该“第二条件指令”具有与要设置为断点的位置处的条件指令执行条件不同的执行条件(步骤S303)。
如果在查找位置处的指令不是第二条件指令(步骤S303否),则调试信息查找处理单元65进入到步骤S308。
如果在查找位置处的指令是第二条件指令(步骤S303是),则调试信息查找处理单元65检查表示第二条件指令执行条件的状态改变的状态标志是否为“1”(步骤S304)。
如果第二条件指令执行条件的状态标志为“1”(步骤S304是),则调试信息查找处理单元65检查该第二条件指令是否为分支指令(步骤S305)。
如果第二条件指令为分支指令(步骤S305是),则调试信息查找处理单元65判断是要设置为断点的位置处的条件指令执行条件的满足是否能够预测(步骤S306)。基于调试信息查找处理单元65作出的“不可预测性”的判断,输入/输出处理单元61执行输出处理以将该结果告知用户,并将该通知显示在输入/输出设备22的显示器上。
如果第二条件指令不是分支指令(步骤S305否),则调试信息查找处理单元65进入到步骤S312。
如果第二条件指令执行条件的状态标志不是“1”(步骤304否),则调试信息查找处理单元65判断第二条件指令的状态标志是否与处理器31的状态寄存器36中执行条件的状态标志相匹配(步骤S307)。如果二者相匹配(步骤S307是),则调试信息查找处理单元65继续进行步骤S308的处理,如果二者不相匹配(步骤S307否),则调试信息查找处理单元65继续进行步骤S312的处理。
在步骤S308,调试信息查找处理单元65检查位于查找位置处的指令是否为影响任何条件指令执行条件的指令(步骤S308)。注意,下文中将影响条件指令执行条件的指令为“条件生成指令”。
如果位于查找位置处的指令为条件生成指令(步骤S308是),则调试信息查找处理单元65将受条件生成指令影响的执行条件的状态标志设置为“1”(步骤S309),并继续进行步骤S312的处理。
如果位于查找位置处的指令不是条件生成指令(步骤S308否),则调试信息查找处理单元65检查位于查找位置处的该指令是否为分支指令(步骤S310)。如果位于查找位置处的该指令为分支指令(步骤S310是),则调试信息查找处理单元65将查找位置移至分支目标位置(S311),并继续进行步骤S302的处理。如果位于查找位置处的该指令不是分支指令(步骤S310否),则调试信息查找处理单元65继续进行步骤S312的处理。
在步骤S312,调试信息查找处理单元65将查找位置移至下一指令(步骤S312),并继续进行步骤S302的处理。
在步骤S313,调试信息查找处理单元65判断位于要作为断点的位置处的条件指令执行条件的满足是否能够预测(步骤S313),并且断点设置处理单元66根据该判断结果将指定的条件指令位置设置为断点(步骤S314)。接下来,断点设置处理单元66继续执行图13所示的步骤S102的处理。
查找处理1在所述可预测性判断处理的步骤S306,当调试信息查找处理单元65判断出位于要作为断点的位置处的条件指令执行条件的满足为不可预测时,该调试信息查找处理单元65可执行以下处理。明确地说,调试信息查找处理单元65可从第二条件指令和无条件指令中检测最接近该条件指令的指令,所述无条件指令在位置上紧跟要作为断点的位置处的条件指令。然后,调试信息查找处理单元65既可将该条件指令的位置,又可将检测的指令位置设置为预备断点。
图20是表示由调试单元23B执行的用于查找预备断点的查找处理操作流程的流程图。注意到,基于存储在存储单元21中的存储信息而执行该查找处理。
如果在图19的步骤S306中调试信息查找处理单元65判断出位于要作为断点的位置处的条件指令执行条件的满足不可预测,则调试信息查找处理单元65查找该指定的条件指令之后的下一指令(步骤S401)。
调试信息查找处理单元65判断位于查找位置处的指令是否为其执行条件与要作为断点的指定条件指令的执行条件不相同的条件指令(步骤S402)。
如果位于查找位置处的指令为具有与要作为断点的指定条件指令的执行条件不同的执行条件的条件指令(步骤S402是),则断点设置处理单元66将指定的条件指令和查找位置处的指令都设为断点(步骤S405)。然后,断点设置处理单元66进入图13所示的步骤S102的处理。
如果位于查找位置处的指令不是具有与要作为断点的指定条件指令的执行条件不同的执行条件的条件指令(步骤S402否),则调试信息查找处理单元65检查位于查找位置处的指令是否为无条件指令(步骤S403)。
如果位于查找位置处的指令为无条件指令(步骤S403是),则中断设置处理单元66将指定的条件指令和位于检查位置处的指令都设为断点(步骤S405)。然后,断点设置处理单元66进入图13所示的步骤S102的处理。
如果位于查找位置处的指令不是无条件指令(步骤S403否),则调试信息查找处理单元65查找下一指令(步骤S404),并回到步骤S402的处理。
查找处理2当调试子程序时,如果将子程序中的条件指令位置设为断点,可取代所述的可预测性判断处理而执行下面的查找处理,以设置一个或多个候选点作为预备断点。
图21是表示由调试单元23B执行查找操作以设置一个或多个候选点作为预备断点的查找处理操作流程的流程图。注意到,该查找处理基于存储在存储单元21中的调试信息而执行。
存储单元21存储图21的查找处理中使用的条件查找表。条件查找表由成对的条件(执行条件)和该条件的标志(状态标志)组成,在图22中示出其中的一个例子。图22中条件查找表中的各执行条件具有相反的条件。注意到,条件查找表不局限于包括作为执行条件相反条件的执行条件。
调试信息查找处理单元65为条件查找表中示出的各执行条件设置状态标志,并且将指定的条件指令之后的下一指令作为查找开始位置而开始查找(步骤S501)。
调试信息查找处理单元65判断该查找位置是否为子程序的结束位置(步骤S502)。如果该查找位置为子程序的结束位置(步骤S502是),则调试信息查找处理单元65记录该子程序的结束位置作为断点候选位置(步骤S512),并结束该处理。如果该查找位置不是子程序的结束位置(步骤S502否),则调试信息查找处理单元65判断该查找位置处的指令是否为条件指令(步骤S503)。
如果该查找位置处的指令不是条件指令,换言之,为无条件指令(步骤S503否),则调试信息查找处理单元65记录该无条件指令的位置作为断点候选位置(步骤S512),并结束处理。如果该查找位置处的指令是条件指令(步骤S503是),则调试信息查找处理单元65基于条件查找表而判断位于查找位置处的条件指令执行条件与在先找到的条件指令的执行条件是否相同(步骤S504)。
如果位于查找位置处的条件指令的执行条件与在先找到的条件指令的执行条件相同(步骤S504是),则调试信息查找处理单元65将查找位置移至下一指令(步骤S511)。如果位于查找位置处的条件指令执行条件与在先找到的条件指令的执行条件不相同(步骤S504否),则调试信息查找处理单元65基于条件查找表而判断位于查找位置处的条件指令执行条件与在先找到的条件指令执行条件是否相反(步骤S505)。
如果位于查找位置处的条件指令执行条件与在先找到的条件指令执行条件是相反的条件(步骤S505,是),则调试信息查找处理单元65在条件查找表中将位于查找位置处的条件指令执行条件的状态标志设置为“1”(步骤S506)。然后,调试信息查找处理单元65记录位于查找位置处的条件指令位置作为断点候选位置(步骤S507),并结束处理。
如果位于查找位置处的条件指令执行条件与在先找到的条件指令执行条件不是相反的条件(步骤S505,否),则调试信息查找处理单元65在条件查找表中将位于查找位置处的条件指令执行条件的状态标志设置为“1”(步骤S508)。接下来,调试信息查找处理单元65记录查找位置处的条件指令位置作为断点候选位置(步骤S509)。然后调试信息查找处理单元65判断条件查找表中的全部状态标志是否均为“1”(步骤S510)。
如果条件查找表中的全部状态标志均为“1”(步骤S510是),则处理结束。如果条件查找表中的全部状态标志并不都为“1”(步骤S510否),则调试信息查找处理单元65将查找位置移至下一指令(步骤S511)。
在图13的步骤S101,断点设置处理单元66将以上处理中记录为断点候选位置中的至少一个位置设为断点。
(断点设置处理的具体例子2)下面说明当执行子程序的调试时将子程序中的条件指令位置设置为断点以确保子程序的调试停止的断点设置处理的具体例子。
图23示出了源程序中的部分子程序。与图23对应的图24示出了助忆性表达可执行程序的调试信息的一部分。当将源程序转换为可执行程序时产生该调试信息。图25示出了助忆性表达其中设置有断点的可执行程序的调试信息的一部分。
图23表示源代码的行号,以及用C语言表示的语句。图23中的源程序含义如下“为函数sub提供参数1并调用,将返回值代入变量r(行号10)。如果变量r的值为0,则返回至主程序(行号11至13)。”图24示出了指令地址、指令的执行条件和助忆性表达的指令。图24中的缩写指令含义如下“在寄存器R1(地址0x80000000)中存储1。保存下一个指令的地址至堆栈,并转移至函数sub(地址0x80000004)。如果函数sub的结果为0,则在程序计数器中设置从堆栈指针的返回地址,并恢复主程序(地址0x80000008)。如果函数sub的结果不是0,则将寄存器R1的值写至由堆栈指针(地址0x8000000C)的值加0x10得到的值表示的地址的存储器。
在图24中,如果将地址0x80000008的位置,即指定“ZERO”的条件指令的位置设置为断点,则如图25所示,断点设置处理单元66使地址0x80000008的执行条件“ZERO”保持不变,且重写返回指令“RET”为表示中断指令的“BRK”。而且,断点设置处理单元66将位于返回指令之后并在该处理中被检查的地址0x8000000C中的“转移指令(SP+0x10)”重写为表示中断指令的“BRK”。
补充说明(1)本发明可以是执行所述断点设置处理的调试设备,或者可以是调试器或断点设置方法。
(2)虽然在以上实施方式中对RISC处理器进行了说明,但本发明也可应用于CISC(复杂指令集计算机)处理器。
(3)虽然说明的是处理器31安装在评估板3中,但处理器可设置在主机2中。而且,除了处理器31,可以在评估板3和主机2中设置模拟处理器31的仿真器,且该仿真器可执行作为调试对象的可执行程序的调试。而且,模拟处理器31操作的仿真器可以取代处理器31并以程序的形式包含在主机2中。此外,包含模拟处理器31操作的仿真程序的系统可以代替评估板3。
(4)虽然上述实施方式中说明的是处理器31具有两种指令格式,具体地说是32位和16位指令,但处理器31可具有单一指令格式或者三种或更多种指令格式。而且,虽然对指令格式的说明限定了表示执行条件的“cond”的位置,但该指令格式也可以是在不同于所述位置的位置上指定执行条件的格式。
(5)当将本发明应用至能够自由执行不同长度指令的处理器时,可以提供长度为具有执行条件(在本发明的优选实施方式中为16位)的最短指令的中断指令,且这可用于替代中断指令。
(6)在上述实施方式中,为了使解释简化,将指令格式中的一部分位描述为表示执行条件。然而,本发明的根本在于将中断指令的执行条件设置为与由该中断指令代替的指令的执行条件相同。例如,即使表示执行条件的位不在指令格式中的指定位置上,但仍可充分地指定执行条件。而且,能够容易地确认由中断指令代替的指令的执行条件就足够了,并且在该中断指令中设置同样的执行条件。
(7)虽然在实施方式中说明的是处理器31具有五级结构,但流水线中的级数可以是不同于五的数目。而且,处理器31也不必一定具有流水线结构。
虽然已参考附图通过例子对本发明进行了充分说明,要注意的是,各种改变和修改对本领域技术人员来说是显而易见的。因此,除非这样的改变和修改脱离了本发明的范围,否则它们应当视为包含在其中。
工业适用性本发明可有效地应用于软件开发执行的调试中。
权利要求
1.一种指令执行设备,其执行存储在存储设备中的指令,该指令执行设备包括存储单元,用于存储作为指令执行结果的值;执行单元,用于执行中断指令执行的调试指令;识别单元,用于从构成调试指令的位序列中识别条件表达式,该条件表达式使用作为操作数存储在存储单元中的数值;判断单元,用于通过参考存储在存储单元中的值判断识别的条件表达式为真或假;其中,当判断出条件表达式为假时,执行单元禁止调试指令的执行。
2.按照权利要求1所述的指令执行设备,其特征在于,所述调试指令在长度上比该指令执行设备的指令集中长度最短的指令短。
3.一种调试方法,其能够在由权利要求1所述的指令执行设备解码并执行过的程序中设置断点,该方法包括判断已设置为断点的位置处的指令是否为条件指令;并且当判断结果是已设置为断点的位置处的指令是条件指令时,则将该条件指令重写入指定了执行条件的调试指令,该执行条件与该条件指令的执行条件相同。
4.按照权利要求3所述的调试方法,进一步包括当判断出设置为断点的位置处的指令是条件指令时,基于位于该条件指令之前位置处的指令而判断是否可能预测该条件指令的执行条件是否会被满足,并且当判断出该预测为不可能时,通知用户该预测是不可能的。
5.按照权利要求3所述的调试方法,进一步包括当判断出设置为断点的位置处的指令是条件指令时,基于位于该条件指令之前位置处的指令而判断是否可能预测该条件指令的执行条件是否会被满足,当判断出该预测为不可能时,在位于该条件指令之后的一条或多条指令中查找与该条件指令最接近的指令,并且所述一条或多条指令为(a)具有不同于该条件指令执行条件的第二条件指令,和(b)没有条件的无条件指令中的一种,并且将作为查找结果找到的指令位置设置为预备断点。
6.按照权利要求3所述的调试方法,进一步包括当判断出设置为断点的位置处的指令是条件指令时,查找一条或多条位于该条件指令之后的指令,并且这样的一条或多条指令为(a)具有多个条件中任何一个的条件指令和(b)没有条件的无条件指令中的一种,并且将作为查找结果找到的一条或多条指令的每一个位置设为断点候选位置。
7.按照权利要求6所述的调试方法,进一步包括当判断出设置为断点的位置处的指令是子程序中的条件指令时,判断该查找中的查找位置是否为该子程序的结束位置,并且当判断出该查找位置是子程序的结束位置时,结束该查找。
8.按照权利要求6所述的调试方法,进一步包括判断查找中的查找位置处的条件指令执行条件是否与查找中在先找到的条件指令执行条件相反,并且当位于查找位置处的条件指令执行条件与在先找到的条件指令执行条件相反时,结束该查找。
9.一种调试设备,其在能够由权利要求1所述的指令执行设备解码并执行过的程序中设置断点,该调试设备包括判断单元,用于判断设置为断点的位置处的指令是否为条件指令;以及重写单元,用于当判断出设置为断点的位置处的指令是条件指令时,将该条件指令重写入一调试指令,该调试指令指定与该条件指令的执行条件相同的执行条件。
10.一种调试程序,其在能够由权利要求1所述的指令执行设备解码并执行过的程序中设置断点,该调试程序包括判断步骤,判断设置为断点的位置上的指令是否为条件指令;以及重写步骤,当判断出设置为断点的位置处的指令是条件指令时,将该条件指令重写入一调试指令,该调试指令指定与该条件指令的执行条件相同的执行条件。
全文摘要
本发明提供了一种在执行使用软件中断技术在条件指令处设置断点的可执行程序的调试中,根据该条件指令的执行条件表达式为真或者假,在不使用调试设备的情况下,进行是否停止调试的判断。能够解码并执行含有条件指令的程序的处理器执行该程序的调试。当解码指令为条件中断指令时(S201是,S202是),处理器识别该条件中断指令的执行条件类型(步骤S203),并参考状态寄存器以检查该执行条件的状态标志(S204)。如果满足执行条件(S205是),则处理器执行中断处理以挂起调试(S206),并且如果不满足执行条件(S205否),则处理器继续调试。
文档编号G06F11/36GK1869952SQ20061007842
公开日2006年11月29日 申请日期2006年5月26日 优先权日2005年5月27日
发明者宅间显, 柴田耕作 申请人:松下电器产业株式会社
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1