首页> 中国专利> 程序调试装置、程序调试方法及程序

程序调试装置、程序调试方法及程序

摘要

提供一种减轻调试作业者的负担、提高调试作业的效率的程序调试装置。在程序调试装置中,在停止命令为执行条件不成立的带执行条件的命令时,继续执行调试对象程序直到即将到达下一个执行的执行条件成立的带执行条件的命令或者下一个执行的没有执行条件的命令。

著录项

  • 公开/公告号CN1577291A

    专利类型发明专利

  • 公开/公告日2005-02-09

    原文格式PDF

  • 申请/专利权人 松下电器产业株式会社;

    申请/专利号CN200410055711.5

  • 发明设计人 柴田耕作;

    申请日2004-07-30

  • 分类号G06F11/36;

  • 代理机构72002 永新专利商标代理有限公司;

  • 代理人胡建新

  • 地址 日本大阪府

  • 入库时间 2023-12-17 15:51:36

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2011-10-05

    未缴年费专利权终止 IPC(主分类):G06F11/36 授权公告日:20070829 终止日期:20100730 申请日:20040730

    专利权的终止

  • 2007-08-29

    授权

    授权

  • 2005-04-13

    实质审查的生效

    实质审查的生效

  • 2005-02-09

    公开

    公开

说明书

技术领域

本发明涉及一种通过任意地执行或停止程序并显示程序的执行状态,来支持软件开发者的程序开发的程序调试(debug)装置,特别涉及以带有执行条件的命令的处理程序(processor)为对象的调试装置。

背景技术

暂时停止在处理器上动作的程序的执行并显示程序的执行状态的调试装置对于程序开发是有用的。程序调试装置在程序的任意命令中设置断点(break point)临时停止程序。作为与此有关的先行技术文献,有专利文献1。

该专利文献1所公开的中断控制装置(程序调试装置)为具有判断带执行条件的命令的条件是否成立的判断单元,根据该判断结果控制中断插入的发生的结构。这里,所谓带执行条件的命令是指包括指定执行条件的命令,在执行条件不成立的时候不执行,只有在执行条件成立的时候才执行的命令。并且,指定处理器中的状态寄存器中的1个标记(flag)作为执行条件。即使是与断点一致的命令,如果是执行条件不成立的带执行条件的命令,上述专利文献1的中断控制装置也可以使中断插入不发生。其结果,可以使程序不在该带执行条件的命令下停止。由此,在调试动作不需要的地方可以不中断程序。

[专利文献1]日本专利特开2001-154877号公报

如果采用上述以往的技术,在设定断点时,必须对所有的断点指定是否要评价中断对象命令的执行条件,如果不充分注意,则可能发生在调试作业者希望停止的地方不停止程序的可能。因此增加了调试作业者的负担,存在调试作业的效率低的问题。

例如,需要分别对断点指定是否要评价执行条件的作业。并且,在因带执行条件的命令而停止的时候,可能会发生调试作业者每次都要确认“该带执行条件的命令是哪一个断点?是否真的是评价执行条件指定的?是否真的是由于执行条件的成立而停止的?”这样多余的作业的情况。

并且,在调试装置中,还存在在将停止的带执行条件的命令的位置显示在程序表中的时候,调试作业者不能立即判断“该带执行条件的命令是否真的是指定了评价执行条件,是否真的是由于执行条件的成立而停止的”这样的问题。

发明内容

本发明的目的就是要提供一种减轻调试作业者的负担、提高调试作业的效率的程序调试装置。

为了解决上述问题,本发明一种程序调试装置,用来调试包含带执行条件的命令的程序,其特征在于,包括以下单元:

对整个该程序判断因与上述执行条件无关的停止条件而停止的命令是否为带执行条件的命令的命令判断单元;

当判定为是带执行条件的命令时,判断该执行条件是否成立的条件判断单元;

当判定为执行条件成立时,将该命令决定为停止命令;当判定为执行条件不成立时,将在该命令之后被执行的命令决定为停止命令的决定单元。

如果采用该结构,由于在对调试对象程序的执行没有影响的命令下不停止,因此能起到提高调试作业者的调试作业的效率的作用。例如在调试作业者进行单步执行并确认调试对象程序的动作的情况下,不用确认带执行条件的命令的执行条件是否成立,能够跟踪调试对象程序的举动。

这里,程序调试装置也可以采用还包括当上述条件判断单元判定为执行条件不成立时,控制程序执行直到即将到达最早执行的命令中执行条件成立的命令或者没有执行条件的命令的再执行单元的结构。

如果采用该结构,即使调试对象程序正在执行通过命令也能够停止调试对象程序,由于调试作业者能够在任何地方进行调试对象程序的强制停止操作,因此能够提高调试作业效率。

以下,多次提到的“执行命令”是指“执行条件成立的命令或没有执行条件的命令”。多次提到的“执行下一个命令”是指“下一个最早执行的命令”。

上述决定单元计算后面最早被执行的命令中执行条件成立的命令或者没有执行条件的命令的地址,将算出的地址决定为停止命令的命令地址。

如果采用这样的结构,由于在调试对象程序在通过命令下停止之后,能够省略再执行调试对象程序的辅助操作,能够缩短调试作业者的调试作业时间,因此能够提高调试作业效率。

上述再执行单元也可以采用包括:当命令判断单元判定为带执行条件的命令时,将中断对象命令为带执行条件的命令并且仅在执行条件成立时中断程序的执行这样的执行条件的中断,设定到因上述停止条件而停止的命令的地址中的带执行条件的中断设定单元;进行通过执行执行条件成立的带执行条件的命令或者没有执行条件的命令的步骤而中断的,带条件的单步执行的带条件单步执行单元;在上述带条件单步执行单元进行完带条件的单步执行后,解除上述带执行条件的中断设定单元设定的中断的中断解除单元的结构。

如果采用该结构,由于不需要解析“调试对象程序是否是在执行条件不成立的带执行条件的命令下停止?”的处理,减轻了依赖调试对象程序动作的处理程序的命令设置的处理,因此使上述第1程序调试装置与多种处理程序相对应变得容易。因此削减了上述第1程序调试装置的开发工时。

程序调试装置也可以采用还包括:保持使用者能够设定的标记的标记保持单元;当上述标记保持单元的标记为预定的值时,禁止上述命令判断单元、条件判断单元和决定单元的动作的禁止单元的结构。

如果采用这样的结构,调试作业者能够根据进行关注程序计数器的变更的命令执行流程(フロ一)的调试作业和关注执行的命令的逻辑调试作业中的哪一个作业,灵活地改变调试作业的种类,提高了调试作业的效率。并且,调试作业者在将上述标记复位,进行关注程序计数器的变更的命令执行流程的调试作业时,在命令执行流程通过了设定了断点的地方时,能够使调试对象程序一定停止,自动地使断点更有效地进行命令执行流程的调试作业。由此,提高了调试作业的效率。

程序调试装置也可以采用包括根据显示单元中程序的显示状态变更标记保持单元中的标记的值的标记变更单元的结构。

当作为上述显示状态而显示源程序的显示窗口时,上述标记变更单元将上述标记设定为上述预定的值;当作为上述显示状态源程序的显示窗口没有显示时,将上述标记设定为上述预定值以外的值。

当作为上述显示状态而选择了源程序的显示窗口时,上述标记变更单元将上述标记设定为上述预定的值;当作为上述显示状态没有选择源程序的显示窗口时,将上述标记设定为上述预定值以外的值。

当作为上述显示状态而选择了源程序的显示窗口时,上述标记变更单元将上述标记设定为上述预定的值;当作为上述显示状态而选择了汇编程序的显示窗口时,将上述标记设定为上述预定值以外的值。

如果采用上述结构,即使使用者不特别明确地设定标记,在使用者关注源程序时,不会因执行条件不成立的命令而停止,能够掌握程序在源代码的什么位置上停止而不会误解。并且,在使用关注汇编程序代码时,由于所有的命令停止了,因此容易掌握读出了哪个汇编程序代码并处于命令流水线中。

上述命令判断单元也可以对由于不通知使用者而在程序调试装置的管理下设定的中断,即与执行条件成立与否无关的临时中断而停止的命令进行上述判断。

如果采用该结构,由于在进行C语言级的单步执行或持续执行直至函数结束的返回执行时,不会与临时中断的命令无关而通过临时中断执行调试对象程序,因此能够在调试作业者期待中断的地方停止,并且不判断设定临时中断的命令的种类也可以,所以减轻了调试装置开发中的复杂程度,削减了调试装置开发的工时。

上述程序调试装置也可以采用还包括保持使用者能够设定的规定数的规定数保持单元;当上述条件判断单元判定为执行条件不成立时,如果由于上述停止条件而停止的命令中后续有上述规定数以上的执行条件不成立的带执行条件的命令,则上述决定单元将该停止的命令决定为停止命令的结构。

如果采用这样的结构,当变更停止地址时,停止地址不会变更到远离执行中的命令至使调试作业者不能直观地认识到的地址,能够显示调试作业者容易预测的结果,提高了调试作业的效率。

上述程序调试装置也可以采用还包括:当决定单元决定为停止命令时,检索在程序停止之前最后执行的命令中的执行条件成立的带执行条件的命令或者没有执行条件的命令的在最终执行命令检索单元;根据上述最终执行命令检索单元检索到的命令的地址判断在高级语言的源代码中的哪1行停止的停止行判断单元;以及控制显示单元显示判定的行的显示控制单元的结构。

如果采用这样的结构,由于不将与通过命令相对应的源代码行即不执行的源代码行作为停止源代码行,因此调试作业者能够正确地认识正在执行哪1个源代码,提高了调试作业效率。并且,由于根据通过命令不变更停止地址,因此调试作业者能够观察调试对象程序停止时的正确的程序计数器。

上述停止行判断单元也可以在最终执行命令检索单元检索上述最终执行失败时,根据现在的程序计数器所指示的地址,判断在高级语言的源代码中的哪1行停止;上述显示控制单元在检索上述最终执行失败时控制显示单元显示源代码行没有执行的情况。

如果采用这样的结构,即使在调试对象程序中没有执行过的命令,调试作业者也容易直观地认识调试对象程序中现在的位置,能够提高调试作业效率。并且,与通常停止时相比,即使是在没有执行的源代码行中,在没有执行的源代码行上停止的,也只有在最终执行命令的检索失败时才有,因此缩短了调试作业者认识没有执行的源代码行的时间,提高了调试作业的效率。

为了解决上述问题,本发明的数据处理装置为与程序调试装置相连接、执行调试对象程序的数据处理装置,包括保持执行条件成立的带执行条件的命令执行时以及没有执行条件的通常命令执行时设定的命令执行标记的执行标记保持单元;以及保持最后执行的执行条件成立的带执行条件的命令或没有执行条件的通常命令的某一个命令的地址的最终执行命令地址寄存器。

如果采用这种结构,由于在上述最终执行命令检索单元检索最终执行命令时,不必解析依赖于处理程序的命令,减少了调试装置开发中依赖处理程序的地方,因此减少了调试装置进行与别的处理程序相对应时的工时。并且,与用跟踪数据检索最终执行命令的上述第2程序调试装置相比,由于省略了对跟踪数据的检索处理,因此上述第3程序调试装置能够简化。

上述数据处理装置也可以采用还包括指定任意选择的1个以上的中断原因的事件指定寄存器;用来保持中断要求信号的中断原因寄存器;以及当上述事件指定寄存器指定的中断原因的至少1个保持在上述中断原因寄存器中时,禁止更新上述最终执行命令地址寄存器和上述执行标记保持单元的禁止更新单元的结构。

如果采用这样的结构,由于上述最终执行命令地址寄存器和上述命令执行标记在发生断点插入等的时候,自动地保持发生调试事件中断要求时的状态,并且在检测到中断后,将中断要求的登录复位时,自动地再次更新,因此不经过特别的步骤也能够检测到上述最终执行命令检索单元应该检测到的命令。

上述数据处理装置也可以同时执行多个命令,并且还包括比较同时执行的多个命令的地址的地址比较器;以及选择上述比较器的地址比较的结果中最高位的地址输出给最终执行命令地址寄存器的选择输出单元。

如果采用这种结构,能够保持在能够同时执行多个命令的处理器中动作的调试对象程序中、位于最前方的被执行过的命令的地址,能够向调试作业者详细地表示已经执行到调试对象程序中的什么部位。由此,能够提高调试作业的效率。

上述数据处理装置也可以采用还包括计数表示有多少个执行条件不成立的带执行条件的命令连续通过的连续通过命令数的连续通过命令数计数器;以及当上述连续通过命令数超过规定的值时产生中断插入的中断插入产生单元的结构。

如果采用这种结构,即使在例如执行条件不成立的命令从连续不断的停止位置进行单步执行时,也能够在适当的地方中断,能够提高调试作业的效率。

上述数据处理装置还包括使执行条件不成立的带执行条件的命令中设定的断点无效的断点通过单元;以及在执行条件不成立的带执行条件的命令通过断点以后使上述连续通过命令数计数器有效的有效化单元。

如果采用这样的结构,在例如命令存储器中的存储有调试对象程序的区域以外的区域,被通过命令覆盖的状态下,即使断点设定在调试对象程序的最后的命令中,并且上述最后命令为通过命令,由于断点通过后能够在一定的范围内中断,因此调试作业者容易认识到执行了上述最后命令这一情况。由此能够提高调试作业的效率。

上述中断插入生成单元也可以采用在产生中断插入时将连续通过命令数计数器复位的结构。

如果采用这样的结构,上述第4程序执行装置即使没有安装对执行条件不成立的带执行条件的命令产生中断插入的单元,如果在通过的命令中设定断点,也一定会发生超过上述通过命令数的中断插入。由此,中断对象不必准备指定是否对执行条件不成立的带执行条件的命令产生中断的专用的单元,能够简化上述第4程序执行装置。

上述数据处理装置也可以采用还包括在同时执行被上述断点通过单元通过的断点的对象命令和执行条件成立的带执行条件的命令或不带执行条件的命令时,如果前者的命令的地址位于比后者的命令的地址低的位置,则使上述连续通过命令数计数器无效的无效化单元。

如果采用这样的结构,由于能够在能够同时执行多个命令的处理程序中动作的调试对象程序中,正确地反映同时评价执行条件的命令之间的前后关系,调试作业者能够直观地理解发生超过上述通过命令数的中断插入的理由,因此能够提高调试作业的效率。

本发明的编译器为根据源程序生成目标程序的编译器,包括计数生成的目标程序中连续的带执行条件的命令的最大个数的计数器;以及生成包含上述最大个数的调试信息的生成单元。

本发明的程序为成为程序调试装置调试的对象的程序,上述程序包含表示程序中包含的连续的带执行条件的命令的最大个数的调试信息。

如果采用编译器和程序,能够提供提高检测程序调试装置或数据处理装置的程序失控的检测精度的调试信息。

并且,本发明程序调试方法对于在计算机中实现的程序也具有与上述相同的结构、作用和效果。

发明效果

如果采用上述结构的本发明的实施例,即使调试作业者没有意识到以带执行条件的命令为中断对象的断点在什么样的情况下有效,程序调试装置也能自动地控制是否通过以执行条件不成立的带执行条件的命令为中断对象的断点,因此几乎不存在调试对象程序停止在与没有执行的命令相对应的源代码行中这样的显示状态,调试作业者容易直观地认识调试对象程序的执行路径,能够提高调试作业的效率。

并且,即使在在通过命令连续的地方设定断点等特殊情况下,调试作业者也能够在预想的范围内自动地中断调试对象程序,使调试作业者不至于丢失调试对象程序的执行路径。

附图的简要说明

图1表示本发明的实施形态的程序调试系统1的外观的图

图2表示本发明的实施形态的程序调试系统5的外观的图

图3表示在程序调试装置2中模拟软件启动后的显示内容的一例的图

图4表示在程序调试装置2中调试软件执行中的显示内容的一例的图

图5表示调试对象程序的源代码的变形例的图

图6表示第1实施形态中程序执行装置6和程序调试装置2的结构的方框图

图7表示命令输入窗口W3的显示内容的一例的图

图8表示程序调试装置2中第1停止后处理的流程的图

图9表示程序调试装置2中第2停止后处理的流程的图

图10表示程序调试装置2中第3停止后处理的流程的图

图11表示程序调试装置2中执行命令地址计算处理的流程的图

图12表示程序调试装置2中第1强制停止处理的流程的图

图13表示代码显示窗口W1和源显示窗口W4的显示内容的一例的图

图14表示程序调试装置2中第2强制停止处理的流程的图

图15表示程序调试装置2中命令单位的单步执行处理的流程的图

图16表示程序调试装置2中源代码行单位的单步执行处理的流程的图

图17表示代码显示窗口W1和源显示窗口W4的显示内容的一例的图

图18表示程序调试装置2中返回执行处理的流程的图

图19表示代码显示窗口W1和源显示窗口W4的显示内容的一例的图

图20表示程序调试装置2中断点处理的流程的图

图21表示程序调试装置2中断点的通过检测处理的流程的图

图21A表示命令输入窗口W3的显示内容的一例的图

图21B表示自动标记模式中控制单元的自动标记设定处理的流程图

图21C表示本实施形态的编译器的概要的说明图

图21D表示有指示生成调试信息的选择指定时,编译处理的流程图

图21E表示源程序的一例

图21F表示源程序的编译结果的执行形式文件的一例的示意图

图21G表示调试信息11b的一例的说明图

图22表示本发明的第2实施形态的程序执行装置206和程序调试装置202的结构的方框图

图23表示源代码显示单元中停止源代码行显示处理的流程的图

图24表示代码显示窗口W1和源显示窗口W4的显示内容的一例的图

图25表示代码显示窗口W1和源显示窗口W4的显示内容的一例的图

图26表示本发明的第3实施形态中程序执行装置306和程序调试装置302的结构的方框图

图27表示执行地址生成单元370的结构的方框图

图28表示禁止更新信号生成单元360的结构的方框图

图29表示本发明的第4实施形态的程序执行装置406和程序调试装置402的结构的方框图

图30表示中断信号生成单元470的结构的方框图

图31表示中断控制单元460的结构的方框图

图32表示代码显示窗口W1的显示内容的一例的图

具体实施方式

<实施形态1>

<程序调试系统的外观>

图1为表示本发明的实施形态1的程序调试系统的外观的图。图中的程序调试系统1由程序调试装置2和程序执行装置3组成。

程序调试装置2包括本体装置2a、显示装置2b和输入装置2c。本体装置2a为通过输入装置2c接受调试作业者的输入,控制程序执行装置3执行调试对象程序,用显示装置2b显示执行状态的装置。

该程序调试装置2的结构为,对于执行调试对象程序的停止,对所有调试对象程序一律禁止在执行条件不成立的带执行条件的命令下的停止。这里,所谓带执行条件的命令是指包括指定执行条件的命令,在执行条件不成立的时候不执行,只有在执行条件成立的时候才执行的命令。指定处理器中的状态寄存器中的1个标记作为执行条件。并且,下面将执行条件不成立的带执行条件的命令称为“通过命令”。

在本实施形态中,程序调试装置2具有特别的标记(以下称为“跳跃标记”),当跳跃标记(skip flag)为1时,对所有的调试对象程序一律禁止在通过命令下的停止;当跳跃标记为0时,对所有的调试对象程序一律允许在通过命令下的停止。跳跃标记的缺省值为1。

程序执行装置3包括本体装置3a、显示装置3b和输入装置3c,为模仿执行调试对象程序的处理器(或者具备处理器的评价用插件板)的动作的模拟软件的数据处理装置,通过LAN电缆4受程序调试装置2的控制,该处理器执行调试对象程序。在目标系统处于设计阶段或不存在时,程序执行装置3能够取代其作用。

图2为表示其他的程序调试系统5的外观的图。该图的程序调试系统5与图1相比,在具备程序执行装置6来取代程序执行装置3这一点不同。程序执行装置6为处理器或具备处理器的评价用插件板,通过连接电缆7受程序调试装置2的控制。

程序调试装置2在与图1所示的模拟器即程序执行装置3相连的情况下或在与图2所示的处理器(或者评价用插件板)即程序执行装置6相连的情况下,动作的本质相同。

并且,也可以在程序调试装置2的计算机上执行上述模拟软件,兼用作程序执行装置3。

图3表示在程序执行装置3中刚启动模拟软件之后的显示内容的一例。如图所示,W6为控制窗口W6,显示模拟软件正在执行中。在该状态下,程序执行装置执行调试对象程序(模拟)。软件开发者可以通过程序调试装置2利用该程序执行装置3。

图4表示在程序调试装置2中执行调试软件时的显示内容的一例。在该图中,W1为显示调试对象程序的命令代码的代码显示窗口,W2为显示寄存器数据的寄存器内容显示窗口,W3为用来通过使用者的操作输入各种模拟用命令的命令输入窗口,W4为显示调试对象源程序的源显示窗口,W5为显示存储器数据的存储器内容显示窗口。

M1是表示将执行停止的调试对象程序的未执行的前头命令(以下称为停止命令)的停止命令标记,M2是表示与停止命令对应的源程序中的源代码行的停止标记。

代码显示窗口W1显示对于调试对象程序表示命令地址的程序计数值(该图的PC栏)、行编号(LIN栏)、标记(FLG栏)和记忆代码(MNEMONIC栏)等,而且还显示停止命令标记M1。图中,第104行的命令([F]movR3,1)及第105行的命令([F]mov RO,5)为带执行条件的命令。这里,标记[F]表示调试对象程序工作的处理器中具备的状态标记寄存器中的标记F的值,表示带执行条件的命令的条件。在图中的程序例中,标记F通过带条件的执行命令紧前面(第103行)的比较命令(cmp命令),根据比较结果进行设定或复位。第104行及第105行的带执行条件的命令只在设定了标记F时执行命令。这样,标记F在条件分支时,通过将条件成立与否反映到标记F中,在例如依赖于源显示窗口W4中的第103行的if文的条件的执行语句等中被利用。并且,在只有标记F复位时才执行命令的情况下,表示为用[!F]代替[F]。

<第1实施形态的调试对象程序>

调试对象程序有时用C语言书写,用C语言描述的程序用C语言编译器(compiler)变换成与处理器能够理解的机器语言基本上1对1的汇编语言。而且,汇编语言通过汇编程序和连接程序变换成能够在处理器上执行的机器语言。

图5表示C语言源代码10的一部分怎样被C语言编译器变换成汇编语言代码11的一例。

C语言源代码10的虚线内所示的if语句及依据其条件的执行语句与汇编语言代码11的虚线内所示的部分相对应。如前所述,条件分支中条件成立与否反映在标记F的值中。由此,由于从汇编语言代码11排除了分支命令,因此,回避了在处理器上执行程序时产生的分支引起性能的恶化。

汇编语言代码11中的带[F]的命令为与if语句的then一侧的执行语句相对应的代码,带[!F]的命令为if语句的else一侧的执行语句相对应的代码。

调试对象程序包含C语言源代码10等作为源代码的一部分,用编译器、汇编程序和连接程序将上述源代码变换成能够在程序执行装置3或程序执行装置6上执行的形式的执行形式文件的程序。

该执行形式文件及C语言源代码输入程序执行装置3中。执行形式文件在程序执行装置3或6上执行。调试作业者通过程序执行装置3控制程序调试装置2或6执行程序进行调试作业。

<程序执行装置6及程序调试装置3的结构>

图6为表示程序执行装置6及程序调试装置3的主要部分的结构的方框图。

程序执行装置6包括寄存器文件30、命令存储器31、命令执行单元32和总线33,通过流水线处理执行命令。

命令执行单元32流水线处理经过总线33从命令存储器31中读取命令的读取阶段、解读读取的命令的解码阶段、执行解码后的命令的执行阶段和将执行结果写回命令存储器31中的回写阶段这4个阶段。此时,往寄存器文件30中回写执行结果在执行阶段进行。

该命令执行单元32如下这样地处理带执行条件的命令。即,带执行条件的命令在读取和解码后根据执行阶段中条件是否成立决定是否完全执行。当条件成立时,命令执行单元32在执行阶段(a)读出寄存器数据,(b)运算该数据,(c)将运算结果写回寄存器文件,在回写阶段中根据必要往存储器中回写。而当条件不成立时,禁止上述(a)~(c)中的(c)。并且,还禁止回写阶段的动作。这样地,在条件不成立时,带执行条件的命令实质上不执行,由于不发生分支,因此不产生流水线的互锁。

程序调试装置2包括控制单元20、跳跃标记保持单元21和通过命令计数器22。

控制单元20根据通过输入装置2c获取的调试作业者的操作的控制命令控制程序执行装置6执行程序,将执行状态作为与控制命令相对应的应答信息显示在显示装置2b中。

跳跃标记保持单元21保持用来选择是否将通过命令作为停止命令的对象的跳跃标记。

通过命令计数器22计数表示是否让几个连续的执行条件不成立的带执行条件的命令通过的连续通过命令数。例如,通过命令计数器22将规定数作为初始值降值计数,当计数到0时返回初始值继续降值计数。该通过命令计数器22用于检测程序是否失控。因此,规定数可以是应该看作是程序失控的连续通过命令的最大个数。或者,程序调试装置2也可以从编译器中获取调试对象程序中包含的连续的带执行条件的命令的最大个数作为调试信息,将该最大个数作为上述规定数设定到通过命令计数器22中。

跳跃标记保持单元21和上述规定数通过调试作业者如图7所示那样对命令输入窗口W3输入控制命令,能够自由地变更、参照。在该图中,[set skipmode,1]为将跳跃标记设定为1的控制命令,[showskipmode]为显示跳跃标记的值的控制命令。[set passinst,10]为将上述规定数设定为10的控制命令,[show passinst]为显示现在设定的规定数的控制命令。

上述控制单元20在控制程序执行装置6执行程序时,如果跳跃标记为1,则对所有的调试对象程序都不将通过命令作为停止命令的对象。但是,控制单元20在连续通过命令数到达规定数时,将执行条件不成立的带执行条件的命令作为停止命令的对象。由此,在程序失控时或者在陷入死循环时能够停止程序的执行。

由此,调试作业者可以进行关注调试对象程序的执行路径的调试作业。

而当跳跃标记为0时,由于通过命令也作为停止命令的对象,因此调试作业者可以进行关注命令流的调试作业。因此,通过具备跳跃标记保持单元21,能够根据调试作业者希望的调试作业容易地选择程序调试装置的动作。

程序调试装置2可以从程序执行装置6的命令存储器31中读出命令代码,或者从寄存器文件30中读出寄存器数据。

程序调试装置2能够控制程序执行装置6执行调试对象程序,程序执行装置6反馈对执行控制的应答。

<第1实施形态中的停止后处理S1的结构>

首先,作为本发明的第1实施形态的特征的程序调试方法,就停止后的处理进行说明。

图8为表示停止后处理S1的内容的流程图。该停止后处理S1为在程序调试装置2中包含命令单位的单步执行、源行单位的单步执行、强制停止处理和断点处理等的处理,在将解码PC(程序计数器)的命令地址作为判断基准、停止调试对象程序后立即实施。这里所谓的将解码PC的命令地址作为判断基准的停止是众所周知的技术,与带执行条件的命令成立与否无关地进行判断。下面为了叙述上的方便将该停止称为“临时停止”,将临时停止时未执行的命令称为“临时停止命令”,将临时停止命令的地址称为“临时停止地址”。

控制单元20在临时停止命令为通过命令的时候,进行停止后处理S1,以便将调试对象程序的停止位置变更为此后最早执行的命令(即通过命令以外的未执行命令且此后最早执行的命令)的命令地址。

在该图中,开始停止后处理S1后,控制单元20判断是否设定了跳跃标记保持单元21(步骤S50)。如果该结果为没有设定跳跃标记保持单元21,则结束停止后处理。此时,无论临时停止命令是没有执行条件的通常命令,还是执行条件成立的带执行条件的命令,或者是执行条件不成立的带执行条件命令(通过命令),都成为停止命令。

而如果设定了跳跃标记保持单元21,则控制单元20算出下一个执行命令的地址(步骤S4),判断算出的下一个执行命令的地址与停止地址(临时停止命令的地址)是否相同(步骤S51),如果算出的地址与停止地址相同,则结束停止后处理。由于算出的地址与停止地址相同时意味着临时停止命令不是通过命令,因此临时停止命令成为正式的停止命令。

而如果算出的地址与停止地址不同,则控制单元20在程序执行装置6中执行调试对象程序直至马上就要到达算出的下一个执行命令的地址(步骤60)。此时,由于意味着临时停止命令为通过命令,因此算出的地址的命令成为停止命令。在步骤60中,控制单元20指示在程序执行装置6中执行通过命令。由于通过命令本身并不执行,因此程序执行装置6根据该指示,将程序计数器的值增值,解码PC指示上述算出的地址(停止命令的命令地址)。

通过上述这样的停止后处理S1,可以将通过命令以外的命令作为停止命令。

图9为表示停止后处理S1的变形例停止后处理S1a的流程图。该图所示的流程图与图8相比,在具备步骤S61而不具备步骤S51和步骤S60这一点上不同。在步骤S61中,控制单元20将在步骤S4中算出的下一个执行命令决定为停止命令,将其地址决定为停止地址。图9由于省略了步骤S60,因此在临时停止命令为通过命令的时候,虽然程序执行装置6为在临时停止命令下停止的状态,但在程序调试装置2内部,临时停止的通过命令和下一个执行命令,都决定为停止命令,将其地址作为命令地址。其结果,程序调试装置2能够防止将通过命令作为停止命令显示。此时,虽然程序执行装置6和程序调试装置2的停止命令不一致,但这一不同也只有是否通过了通过命令这一点不同,在再次开始执行程序后就消除了,因此没有任何问题。

如果采用图9,由于与图8相比不需要执行调试对象程序的步骤,因此能够更加简单地实现。

图10为表示停止后处理S1的其他变形例即停止后处理S1b的流程图。

在该图的步骤S1b中,当控制单元20判定为在步骤S50中没有设定跳跃标记保持单元21时,结束停止后处理。并且,在设定了跳跃标记保持单元21的情况下,控制单元20将通过命令不中断的带条件的中断设定到临时停止命令的地址中(步骤S62),在执行临时停止命令或让其通过后,接着进行在执行命令下停止的带条件的单步执行(步骤S63),解除在步骤S62中设定的带条件的中断(步骤S64)。

在图10所示的停止后处理S1b中,如果临时停止命令为通过命令,在步骤S62中设定的带条件中断处不中断,在步骤S63的带条件单步执行中程序计数器前进到下一个执行命令;如果临时停止命令不是通过命令,则在步骤S62中设定的带条件中断处中断。这样,不管临时停止命令是执行还是通过,都能够以相同的过程实现与停止后处理S1、S1a相同的功能。

如果采用上述停止后处理S1、S1a或S1b,当临时停止命令为通过命令时,控制单元20将调试对象程序的停止位置变更为下一个执行命令存在的地址。结果防止了在程序调试装置2中对通过命令显示停止命令标记M1(参照图4)。其结果,由于在再次开始执行程序时执行紧接停止命令标记后的命令,因此容易直观地认识调试对象程序的执行路径,提高调试作业的效率。

另外,图6的程序执行装置6也可以不具备跳跃标记保持单元21,在图8、9和10中,也可以采用没有跳跃标记判断步骤S50的结构。用这样的结构也能获得与上述相同的效果。

<下一个执行命令计算处理S4的详述>

图11表示图8及图9中下一个命令地址计算处理的详情的流程图。在图11中,控制单元20首先将临时停止命令作为当前命令(称为“在以下的步骤中成为对象的当前命令”)(步骤S70),判断当前命令是否为带执行条件的命令(步骤S71),如果当前命令不是带执行条件的命令,则将当前命令的地址决定为输出地址即停止命令的地址(步骤S72),结束下一个命令地址的计算处理。

而当步骤S71的结果为当前命令为带执行条件的命令时,控制单元20判断当前命令的执行条件是否成立(步骤S12),如果判定为当前命令的执行条件成立,则前进到步骤S72,将当前命令的地址决定为输出地址即停止命令的地址,结束下一个命令地址的计算处理。

如果步骤S12的结果为当前命令的执行条件不成立,则控制单元20计算后续命令的地址(步骤S31)。在计算该地址的同时,通过命令计数器22减1。接着,控制单元20判断计数次数是否达到规定数(步骤S73)。该判断通过通过命令计数器22的计数是否为0来进行。如果判定为计数次数达到了规定数,则将临时停止命令的地址决定为输出地址即停止地址(步骤S75),结束下一个命令地址的计数处理。

如果在步骤S73中判定为计数次数达到了规定数,则控制单元20从命令存储器中读出后续命令(步骤S32),将读出的后续命令作为当前命令(步骤S74),返回步骤S71。

如上所述,在下一个执行命令地址计数处理S4中,如果计数下一个执行命令的循环达到了规定数,则将临时停止命令的地址作为停止地址。这样,在由于程序失控等原因在临时停止命令附近不存在执行的命令时,虽然在下一个执行命令地址计数处理S4中算出的下一个执行命令地址为通过命令,但由于将临时停止命令决定为停止命令,因此在停止后处理S1中当停止地址变更时,由于变更后的停止地址收敛在调试作业者预想的范围内,因此调试作业者不会丢失现在的执行路径,能够提高调试作业效率。此时,控制单元20最好显示达到规定数的情况(出错显示)。

<强制停止处理>

下面说明按照使用者的操作,利用程序调试装置2强制停止在程序执行装置6中执行的调试对象程序时的情况。

图12为表示强制停止处理的流程图。如该图所示,控制单元20暂时停止调试对象程序(步骤S10)。进行上述停止后处理S1。由此,在进行强制停止时,不会在通过命令下停止。

图14是表示强制停止处理的变形例的流程图。在图14中,控制单元20暂时停止调试对象程序(步骤S10)。然后,判断停止命令是否为带执行条件的命令(步骤S11),如果其结果为停止命令不是带执行条件的命令,则结束强制停止处理。如果步骤S11的结果为停止命令是带执行条件的命令,则判断执行条件是否成立(步骤S12),如果结果为停止命令的执行条件成立,则结束强制停止处理。如果步骤S12的结果为停止命令的执行条件不成立,则再次执行调试对象程序(步骤S43),结束强制停止处理。即,图14所示的实施形态具备如果停止命令为通过命令则取消强制停止的步骤。

在图5所示那样的程序为调试对象的情况下,以往的程序调试装置如果强制停止调试对象程序,则无论执行条件标记F是否复位,都有可能在图13所示的状态下停止。此时,由于执行条件标记F被复位,因此即使停止命令没有执行,停止代码行标记M2也显示在与停止命令相对应的else一侧的源代码行中,因此由于停止代码行标记M2位于else一侧,调试作业者会根据直觉误认为在执行if语句的else一侧。

但是,如果使用本发明的作为强制停止处理描述的方法,由于在通过命令下调试对象程序不停止,因此能够防止调试作业者的上述错误认识。

虽然在图14所示的强制停止处理中,有时会取消调试作业者对调试对象程序的强制停止操作,但在图12所示的强制停止处理中不会取消强制停止操作,因此对于调试作业者的操作能够更顺畅地应答,提高了调试作业的效率。

<单步执行处理的结构>

下面就用程序调试装置2以命令单位单步执行在程序执行装置6中执行的调试对象程序时的情况进行说明。

图15为表示命令单位的单步执行处理的流程图。

程序调试装置2在程序执行装置6中只执行1个命令(步骤S13),接着与上述强制停止处理时一样执行停止后处理S1。

如果采用上述结构,在命令单位的单步执行中,由于在通过命令下调试对象程序并不停止,因此与上述强制停止处理时一样,停止代码行标记M2不显示在没有执行的源代码行中,因此能够防止调试作业者的误认识。

下面就用程序调试装置2以源代码行单位单步执行在程序执行装置6中执行的调试对象程序时的情况进行说明。

图16表示本发明的第1实施形态中源代码行单位的单步执行处理的流程。

源代码行单位的单步执行处理首先执行读出现在关注的命令的下一个命令的下一个命令读出步骤S2,关注步骤S2中读出的下一个命令的关注命令更新步骤S20,判断与关注命令相对应的源代码行的行编号和与现在的PC相对应的源代码行的行编号是否不同(步骤S21)。

如果行编号判断结果为行编号不同,则进行执行调试对象程序的再执行步骤S23和上述停止后处理S1,直到即将到达关注命令,然后结束源代码行单位的单步执行。

如果行编号判断步骤S21的结果为行编号相同,则判断关注命令是否为分支命令(步骤S22)。

如果其判断结果为关注命令不是分支命令,则回到上述下一个命令读出步骤S2。

如果分支命令判断步骤S22的结果为关注命令是分支命令,则实施上述再执行步骤S23,返回上述下一个命令读出步骤S2。

如果采用上述结构,即使在源代码行单位的单步执行中,由于在通过命令下调试对象程序并不停止,因此与上述强制停止处理时一样,停止代码行标记M2不显示在没有执行的源代码行中,因此能够防止调试作业者的误认识。

<返回执行处理的结构>

下面说明利用程序调试装置2在程序执行装置6中执行的调试对象程序,如图17所示那样在任意的函数(图17中为函数foo)中间停止时,返回到函数的返回处的地址的情况。

图18表示本发明的第1实施形态中的返回处理的流程图。

程序调试装置2在程序执行装置6中执行到即将到达函数返回处(步骤S14),接着与上述强制停止处理时一样实施停止后处理S1。

其结果,由于即使在命令单位的返回执行中调试对象程序在通过命令下也不停止,因此与上述强制停止处理时一样,停止代码行标记M2不显示在没有执行的源代码行中,因此能够防止调试作业者的误认识。

例如在图17所示的停止代码行标记M2表示的函数foo内的停止命令下执行返回时,不包含停止后处理S1的以往的返回处理如图13所示那样,停止代码行标记M2显示在与实际没有执行的命令即inc命令相对应的位置上,但如果使用作为本发明的第1实施形态说明过的返回处理,则停止代码行标记M2如图19所示那样,显示在与mov命令相对应的位置上。

这里,就别的返回执行处理的安装方法进行叙述。

利用判断函数返回处是否为通过命令,如果是通过命令则将断点设定在函数返回处的命令的下一个执行命令中的方法,能够获得与本发明的第1实施形态中的返回处理同样的结果。

但是,由于在停止命令与函数返回处的命令之间几乎都存在多个命令,因此在函数返回处为带执行条件的命令时,为了判断函数返回处的命令的执行条件是否成立是非常繁杂的。

原因是,在停止命令与函数返回处的命令之间执行的命令的结果,必须考虑到函数返回处的命令给执行条件带来的影响。

因此上述“如果是通过命令则将断点设定在函数返回处的命令的下一个执行命令中”这一方法比作为本发明的第1实施形态说明过的方法更有效。

<断点处理的结构>

下面说明利用程序调试装置2,检测在程序执行装置6中执行的调试对象程序断点,停止调试对象程序时的情况。

图20表示断点处理的流程图。

首先,控制单元20判断作为断点的暂时停止是否为临时中断(步骤S40)。这里所谓的临时中断是指通过发生中断,解除断点(中断条件)的临时的中断。临时中断除由使用者指定外,还可以与使用者指定无关地用于例如在程序调试装置内部通过返回命令产生中断。

如果步骤S40的判断结果为检测到的断点为临时中断,则解除临时中断(步骤S41),执行上述停止后处理S1,然后结束断点处理。如果临时中断的判断结果为检测到的断点不是临时中断,则检测是否通过断点(步骤S3),判断是否检测到通过断点(步骤S42)。

如果判断结果为检测到通过断点,则认为断点不进行停止处理,再次执行调试对象程序(步骤S43),结束断点处理。如果步骤S42的结果为没有检测到通过断点,则执行上述停止后处理S1,结束断点处理。

图21为表示图20中的通过检测判断处理S3的详情的流程图。如图所示,首先,判断控制单元20是否设定了跳跃标记保持单元21,(步骤S50)。如果判断结果为控制单元20没有设定跳跃标记保持单元21,则判定为断点没有通过(步骤S53),结束通过检测处理。

如果跳跃标记判断步骤S50的结果为设定了跳跃标记保持单元21,则执行上述下一个执行命令地址计数处理S4,比较步骤S4中算出的下一个执行命令地址与临时停止地址是否一致(步骤S51)。

如果地址比较步骤S51的结果为地址一致,则判定为断点未被通过(步骤S53),结束通过检测处理。

如果地址比较步骤S51的结果为地址不一致,则判定为检测到通过断点(步骤S52),结束通过检测处理。

如果采用上述结构,通过检测处理S3计数下一个执行命令,比较临时停止的地址与算出的地址,如果比较结果为地址不同,则做出中断已通过的判断。即,即使在调试对象程序因断点而停止,但由于调试对象程序在通过命令下并未停止,因此与上述强制停止处理时一样,停止代码行标记M2不显示在没有执行的源代码行中,能够防止调试作业者的误认识。

并且,由于当断点为临时中断时必须停止,因此程序调试装置2在单步执行等内部处理使用断点时,如果通过程序调试装置2设想的执行路径执行调试对象程序,则能够保证在断点停止,能够简单地沿用用于面向不论中断对象命令的执行条件如何都必须中断的以往的典型的程序安装装置的程序调试装置的方法。

而且,由于通过断点是否为临时中断能够决定是否进行通过断点的判断,因此不必对每个断点都保持是否进行通过断点的判断的信息,减轻了调试作业者或调试装置开发者应该注意的信息,所以减轻了调试作业者和调试装置开发者的负担。

并且,通过检测处理S3包含下一个执行命令地址计数处理S4,当下一个执行命令地址计数处理S4中的跳跃命令数超过规定数时,将临时停止地址决定为停止地址。由此具有下述效果:当作为断点临时停止时,不再执行在临时停止命令后接连后续了无效命令这样的设定在不恰当的地方的断点,而停止程序。

<自动标记>

虽然在以上的说明中,是以使用者明示地设定跳跃标记为前提进行说明的,下面就跳跃标记在程序调试装置2中根据显示模式自动地变更跳跃标记的值的自动标记模式进行说明。

跳跃标记保持单元21的内容不仅可以像图7所示那样由调试作业者固定地设定,而且可以像图21A所示那样通过输入命令作为自动标记模式自动地设定和变更。

在图21A中,[set skipmode,auto]为将跳跃标记设定为自动标记模式的控制命令。[show skipmode]为显示跳跃标记的值的控制命令。在该图中,作为其应答显示为[Skip mode:AUTO(……)],表示是自动标记模式。在自动标记模式中,当选中源显示窗口时跳跃标记设定为1,当没有选择源显示窗口时(或者选择命令代码显示窗口时)跳跃标记设定为0。

图21B为表示在自动标记模式中控制单元20自动地设定标记的处理的流程图。在每次由于使用者的操作变更显示状态时控制单元20进行图的处理。即,判断控制单元20是否选择了源显示窗口W4(S101);如果选择了源显示窗口W4,则设定跳跃标记(S102);如果没有选择源显示窗口W4,则将跳跃标记复位(S103)。

通过该自动地设定标记的处理,即使使用者不专门明确地设定跳跃标记,在使用者选择源显示窗口关注源代码时,也不会因执行条件不成立而停止,能够掌握程序在C源代码的什么位置上停止而不会误解。并且,在使用者选择命令代码显示窗口关注汇编程序代码时,由于所有的命令停止了,因此容易掌握读出了哪个汇编程序代码处于命令流水线中。

<编译器>

图21C为表示本实施形态中的编译器的概要的说明图。在该图中,编译器40将源程序10a变换成目标程序(执行形式文件11b)。此时,编译器40根据使用者的选择指定生成调试信息11a。

图21D为有指示生成调试信息的选择指定时编译处理的流程图。在该图中,首先,编译器40将源程序10a变换成目标程序(S90);计数该目标程序中连续的带执行条件的命令的最大个数(S91);生成包含计数的最大个数的调试信息(S92);将调试信息输出给程序调试装置2,将目标程序输出给程序执行装置6(S93)。

图21E表示源程序10a的一例。图21F为表示编译器40编译源程序的结果的执行形式文件的一个示例。在该程序例中,编译器40在上述S91中计数最大个数为4个。即,在图21E中,带[F]或[!F]的执行条件的命令连续有7个。其中带[F]的执行条件的命令4个连续,带[!F]的执行条件的命令3个连续。此时,由于执行条件[F]和[!F]为排他的关系,因此编译器40计数最大个数为4个。

图21G为表示执行形式文件11a的一例的说明图。在该图中,第2行表示程序中包含连续的该执行条件的命令的最大个数为4个。

该执行形式文件11a作为上述规定数设定在用来检测程序失控的通过命令计数器中。因此,可以提高程序调试装置2中失控的检测精度。

另外,在图21D的S91中,编译器40也可以计数与执行条件的内容无关的形式上连续的带执行条件的命令的最大个数。此时,在图21F的执行形式文件的例中,最大个数计数为7个。

并且,虽然在图21C中调试信息11a是与执行形式文件11b分别输出的,但也可以包含在执行形式文件11b中输出。

<第2实施形态的程序调试系统的外观>

由于本发明的第2实施形态的程序调试系统的外观与上述图2所示的第1实施形态的程序调试系统5的外观相同,因此省略其详细说明。但是,本发明的程序调试系统具有程序调试装置202和程序执行装置206,来取代程序调试装置2和程序执行装置6。

由于程序调试装置202显示的画面的内容与上述图4所示的第1实施形态的程序调试装置2所显示的画面的内容相同,因此省略其详细说明。

<调试对象程序>

由于本发明的第2实施形态的调试对象程序与上述本发明的第1实施形态的调试对象程序相同,因此省略其详细说明。

<程序执行装置206的结构>

本发明的第2实施形态的程序执行装置206的基本结构表示于图22中。

本发明的第2实施形态的程序执行装置206包括寄存器文件30、命令存储器31、命令执行单元232、总线33和跟踪模块234。命令执行单元232具备每次执行命令或让其通过时都将程序计数器的值输出给跟踪模块234的单元,为本发明的第1实施形态中的命令执行单元32。

从命令执行单元232获取了程序计数器的值的跟踪模块234依次将程序计数器的值保存在跟踪模块234内部的跟踪存储器中。

<程序调试装置202的结构>

本发明的第2实施形态的程序调试装置202的基本结构表示在图22中。

程序调试装置202包括控制单元220和源代码显示单元235。

程序调试装置202与本发明的第1实施形态的程序调试装置2一样,用控制单元220通过输入装置(图中未表示)接受调试作业者的操作。控制单元220通过显示装置(图中未表示)将与获取的控制命令相对应的应答信息反馈给调试作业者。

当控制单元220根据从调试作业者那里获取的控制命令显示调试对象程序的停止位置的源代码时,通过调用函数执行源代码显示单元235。源代码显示单元235显示调试对象程序的停止位置的源代码后,将返回值反馈给控制单元220。控制单元220根据从源代码显示单元235来的返回值将应答信息提示给调试作业者。

程序调试装置202与本发明的第1实施形态的程序调试装置2一样,能够从程序执行装置206的命令存储器31中读出命令代码或从寄存器文件30中读出寄存器数据,而且还可以读出跟踪模块234的内容。

程序调试装置202与本发明的第1实施形态的程序调试装置2一样能够控制程序执行装置206执行调试对象程序,程序执行装置206反馈执行控制的应答。

另外,虽然对于与本发明的实施没有关系的部分省略了图示,但即使程序调试装置202与程序执行装置206能够交换更多的数据和控制信号,也没有任何问题。

<停止源代码行显示处理的结构>

图23表示上述源代码显示单元235执行的本发明第2实施形态的停止源代码显示处理的流程图。

程序调试装置202具备判断停止命令是否带执行条件的步骤S11和判断停止命令的执行条件是否成立的步骤S12。用步骤S11和步骤S12的结果判断停止命令是否为执行条件不成立的带执行条件的命令(即通过命令)。

如果步骤S11和步骤S12的结果为停止命令不是通过命令,则实施将现在的PC作为停止行地址的步骤S85和显示与停止行地址相对应的源代码行的步骤S86,结束停止源代码显示处理。

图24表示执行源代码窗口W4中的if语句的else一侧时代码显示窗口W1和源显示窗口4的显示例。

在图24所示的状态下,标记F被复位,带[F]的命令为不执行而通过的命令。即,在图24所示的状态下,停止命令为通过命令。

如果步骤S11和步骤S12的结果为停止命令是通过命令,则如图24所示那样,实施将表示不执行停止命令的无效命令标记M3显示在与代码显示窗口W1的停止命令相对应的地方的无效命令标记显示步骤S83,并实施检索最后执行的命令的最终执行命令检索步骤S80。然后实施判断最终执行命令是否存在的步骤S81。

如果步骤S81的结果为最终执行命令存在,则实施将最终执行命令的地址作为停止地址的步骤S82和上述步骤S86,结束停止源代码显示处理。

如果步骤S81的结果为最终执行命令不存在,则如图25所示那样,实施将表示不执行停止源代码行的无效行标记M4显示在与源显示窗口W4的停止命令相对应的地方的无效行标记显示步骤S84,然后实施上述步骤S85和步骤S86,结束停止源代码显示处理。

如果通过上述停止源代码显示处理检索最终执行命令成功,则即使如图24所示那样在实际没有执行的命令下停止,由于停止代码行标记M2也显示在与最后执行的命令相对应的源代码行中,因此调试作业者能够直观地认识到正在执行源代码的哪些部分。

并且,即使在最终执行命令的检索失败的情况下,即使像图25所示那样停止代码行M2显示在实际没有执行的源代码行中,由于显示了无效行标记M4,因此调试作业者也容易认识到停止代码行M2所表示的行没有执行。

<最终执行命令检索处理步骤S80的结构>

本发明的第2实施形态的最终执行命令检索处理步骤S80用从跟踪模块234获得的跟踪数据、从程序执行装置206中获得的寄存器数据和命令代码进行最终执行命令的检索。

由于跟踪数据中包含命令执行单元232执行或者通过的命令的PC,因此直到调试对象程序即将停止之前,能够确定命令执行单元232以什么样的顺序执行或者通过哪些命令。

在步骤S80中,从最后记录的跟踪数据中依次一个一个地读出跟踪数据,从程序执行装置206中读出保持在上述跟踪数据中的PC所表示的命令的命令代码,然后以从程序执行装置206中读出的寄存器数据为基础逐次判断执行条件成立与否。

如果上述读出的命令代码所表示的执行条件成立或者上述读出的命令代码是不带执行条件的命令,则认为最终执行命令存在,将保持在上述读出的跟踪数据中的PC所表示的命令作为最终执行命令。

如果记录的所有的跟踪数据全部读出但没有发现最终执行命令,或者没有记录跟踪数据,则认为最终执行命令不存在。

<第3实施形态的程序调试系统的外观>

由于本发明的第3实施形态的程序调试系统的外观与上述图2所示的第1实施形态的程序调试系统5的外观相同,因此省略其详细说明。

本发明的第3实施形态的程序调试系统由程序调试装置302、程序执行装置306和将程序调试装置302与程序执行装置306连接起来的连接电缆7构成。

由于程序调试装置302显示的画面的内容与上述图4所示的第1实施形态的程序调试装置2所显示的画面的内容相同,因此省略其详细说明。

<第3实施形态的调试对象程序>

由于本发明的第3实施形态的调试对象程序与上述本发明的第1实施形态的调试对象程序相同,因此省略其详细说明。

<第3实施形态的程序执行装置306的结构>

本发明的第3实施形态的程序执行装置306的基本结构表示于图26中。

本发明的第3实施形态的程序执行装置306包括寄存器文件30、命令存储器31、命令执行单元332、总线33、执行命令地址保存单元350和中断控制单元336。命令执行单元332包括同时执行3个命令(命令X、命令Y和命令Z)的单元(图中未表示)、执行地址生成单元370、禁止更新信号生成单元360、执行命令X地址寄存器353、执行命令Y地址寄存器354、执行命令Z地址寄存器355、命令X执行信号356、命令Y执行信号357和命令Z执行信号358,为本发明的第1实施形态中的命令执行单元32。

这里,为了使说明简单,将命令执行单元332能够同时执行的命令数限制在3个,但能够同时执行的命令数只要在1个以上,用本发明就能获得一部分效果。

执行地址生成单元370包括地址解码器337、最终执行命令地址寄存器351和命令执行标记352。

执行地址生成单元370每一个周期都从地址寄存器353~355和执行信号356~358中接受输入,根据输入将执行命令地址和命令执行信号输出给执行命令地址保存单元350。中断控制单元336对命令执行单元332输出要求中断的信号,输出的要求中断信号输入到禁止更新信号生成单元360中。

禁止更新信号生成单元360将禁止更新信号输出给执行命令地址保存单元350。

执行地址生成单元370内的地址解码器337包括以从总线33接收的控制信号、地址和数据为基础将最终执行命令地址寄存器351的内容和命令执行标记352的内容输出给总线33的单元或改写命令执行标记352的内容的单元。由此,命令执行单元332可以通过总线33访问最终执行命令地址寄存器351或命令执行标记352。

<第3实施形态的程序调试装置302的结构>

本发明的第3实施形态的程序调试装置302的基本结构表示在图26中。

本发明的第3实施形态的程序调试装置302与本发明的第2实施形态的程序调试装置202基本相同,只有在程序调试装置202的源代码显示单元235中实施的最终执行命令检索处理步骤S80的结构不同。因此,对于程序调试装置302的结构,与程序调试装置202相同的部分的说明省略。

程序调试装置302具备从程序执行装置306中读出最终执行命令地址寄存器351和命令执行标记352的内容的单元这一点与程序调试装置202不同。

<第3实施形态的最终执行命令地址寄存器351的动作>

图26所示的最终执行命令地址寄存器351具有能够保持最后执行的命令(最终执行命令)的地址的结构。

当禁止更新信号为0(无效)(negtive)且命令执行信号为1(有效)(active)时,最终执行命令地址寄存器351将作为执行命令地址输入的值作为最终执行命令的地址保持;当禁止更新信号为1或者命令执行信号为0(无效)时,保持的内容不更新。

并且,最终执行命令地址寄存器351由地址解码器337和源代码显示单元335参照作为最终执行命令的地址所保持的内容。

<第3实施形态的命令执行标记352的动作>

图26所示的命令执行标记352为表示最终执行命令地址寄存器351的内容有效的结构。

当命令执行标记352自身为0(无效)并且禁止更新信号为0(无效)且命令执行信号为1(有效)时,命令执行标记352为1(有效),在其他的状态下,命令执行标记352不更新。

但是,由于地址解码器337的控制而变更命令执行标记352的内容除外。

并且,命令执行标记352由地址解码器337和源代码显示单元335参照保持的内容。

<第3实施形态的停止源代码行显示处理的结构>

本发明的第3实施形态的停止源代码行显示处理与本发明的第2实施形态的停止源代码显示处理基本相同,只有最终执行命令检索处理步骤S80的结构不同。因此,对于本发明的第3实施形态的停止源代码显示处理的结构,与本发明的第2实施形态的停止源代码显示处理相同的部分省略其说明。

<第3实施形态的最终执行命令检索处理步骤S80的结构>

本发明的第3实施形态的最终执行命令检索处理步骤S80,用最终执行命令地址寄存器351的内容和命令执行标记352的内容进行最终执行命令的检索。

另外,在执行调试对象程序时命令执行标记352初始化为0(无效)。

源代码显示单元335读出命令执行标记352,如果命令执行标记352的内容为0(无效),则认为不存在最终执行命令。如果命令执行标记352的内容为1(有效),则认为存在最终执行命令,读出最终执行命令地址寄存器351的内容,将保持在最终执行命令地址寄存器351中的地址所表示的命令作为最终执行命令。

如上所述,在本发明的第3实施形态中,检索跟踪模块的内部的步骤被简化,程序调试装置302的开发变得容易。

<第3实施形态的执行地址生成单元370的结构>

图27所示的本发明的第3实施形态的执行地址生成单元370包括多路转换器371~375和比较器376。

作为执行地址生成单元370的输入的执行命令X地址寄存器353、执行命令Y地址寄存器354和执行命令Z地址寄存器355,为保持在命令执行单元332中同时执行的命令X、命令Y和命令Z的地址的寄存器。

并且,作为执行地址生成单元370的不同的输入的命令X执行信号356、命令Y执行信号357和命令Z执行信号358,当在命令执行单元332中同时执行的命令X、命令Y和命令Z正在执行时为1(有效),不执行(通过)时为0(无效)。

例如,假设命令X为0x1000号地址的命令,命令Y为0x1004号地址的命令,在命令X、命令Y同时执行时,上述各值如下:

寄存器                               值

执行命令X地址寄存器353               0x1000

执行命令Y地址寄存器354               0x1004

执行命令Z地址寄存器355               不定

信号                                 值

命令X执行信号356                     1(有效)

命令Y执行信号357                     1(有效)

命令Z执行信号358                     0(无效)

上述地址寄存器353~355的值输入到执行地址生成单元370内部的多路转换器371~373中。当上述执行信号356~358为1(有效)时,多路转换器371~373选择上述地址寄存器353~355的值;当上述执行信号356~358为0(无效)时选择0。多路转换器371~373的输出输入到比较器376中。控制多路转换器374使比较器376选择最大值的输入。多路转换器374输出多路转换器371~373的输出中的最大值。

同时,比较器376控制多路转换器375,使其选择与上述多路转换器374选择的地址寄存器353~355相对应的执行信号356~358的值。

同时,比较器376通过多路转换器375输出选择与上述多路转换器374选择的地址寄存器353~355相对应的执行信号356~358的值的值。

将多路转换器374的输出作为执行命令地址,并将多路转换器375的输出作为命令执行信号从执行地址生成单元370中输出,通过这样,即使在命令执行单元332同时执行2个以上的多个命令时,也能够将同时执行的命令的地址中的最高位地址保持在最终执行命令地址寄存器351中,在源代码显示单元显示的停止代码行标记M2能够表示与执行的命令中的最末尾的命令相对应的源代码行,能够直观地表示正确的源代码。

另外,在比较器376的输入中有2个以上的最大值的情况下,无论比较器376采取选择哪个值的结构,本发明都没有问题。

虽然本发明的第3实施形态的命令执行单元332具备同时执行3个命令的单元,但作为本发明的其他的实施形态,在命令执单元只执行1个命令的情况下,也可以直接将图27中的执行X命令地址寄存器353和命令X执行信号356作为执行命令地址和命令执行信号。

并且,虽然本发明的第3实施形态中的命令执行单元332只能同时执行3个命令,但作为本发明的其他的实施形态,即使在命令执行单元具备同时执行2个或4个以上的命令的单元的情况下,也能够容易地从本发明的第3实施形态类推。

<第3实施形态的禁止更新信号生成单元360的结构>

图28所示的第3实施形态的禁止更新信号生成单元360包括事件指定寄存器361、中断原因寄存器362、“与”电路363和比较器364。

中断原因寄存器362从中断控制单元336中接受中断要求信号,在每种中断中将其保存。具体地,中断原因寄存器362具有多个比特,各比特表示每种中断是否有中断要求信号。如果比特为1,则表示有与比特相对应的种类的中断要求;如果比特为0,则表示没有与比特相对应的种类的中断要求。

事件(event)指定寄存器361使命令执行单元332或源代码显示单元302可以任意设定内容。

禁止更新信号生成单元360用“与”电路363取中断原因寄存器362的内容与事件指定寄存器361的内容的逻辑积,用比较器364将其结果与0比较,如果比较器364的输入为0,则将禁止更新信号作为1(有效)输出,如果输入为0,则将禁止更新信号作为0(无效)输出。  调试作业者或程序调试装置302将命令执行时的错误产生的例外的中断种类设定到中断原因寄存器362中,由此,当调试对象程序中的命令在执行时引起错误,PC为中断处理器处的值时,由于最终执行命令地址寄存器351在输入执行时引起例外的命令的地址后并不更新,因此调试作业者能够确认引起了错误的命令,能够帮助调试作业者确定错误的原因。

<第4实施形态的程序调试系统的外观>

由于本发明的第4实施形态的程序调试系统的外观与上述图2所示的第1实施形态的程序调试系统5的外观相同,因此省略其详细说明。

本发明的第4实施形态的程序调试系统由程序调试装置402、程序执行装置406和将程序调试装置402与程序执行装置406连接起来的连接电缆7构成。

由于程序调试装置402显示的画面的内容与上述图4所示的第1实施形态的程序调试装置2所显示的画面的内容相同,因此省略其详细说明。

<第4实施形态的调试对象程序>

由于本发明的第4实施形态的调试对象程序与上述本发明的第1实施形态的调试对象程序相同,因此省略其详细说明。

<第4实施形态的程序执行装置406的结构>

本发明的第4实施形态的程序执行装置406的基本结构表示于图29中。

本发明的第4实施形态的程序执行装置406包括寄存器文件30、命令存储器31、命令执行单元432、总线33、执行条件不成立计数器450和中断控制单元436。命令执行单元432包括同时执行3个命令(命令X、命令Y和命令Z)的单元(图中未表示)、中断信号生成单元470、执行命令X中断判断标记490、执行命令Y中断判断标记491、执行命令Z中断判断标记492、命令X条件判断标记493、命令Y条件判断标记494、命令Z条件判断标记495、命令X有效标记496、命令Y有效标记497和命令Z有效标记498。为本发明的第1实施形态中的命令执行单元32。

但是,虽然本发明的实施形态3的命令执行单元432具备对于同时执行的命令按地址的高低顺序作为命令X、命令Y和命令Z执行的命令执行单元(图中没有示出),但即使不具备上述命令执行单元,用本发明也能够获得部分效果。

这里,为了使说明简单,将命令执行单元432能够同时执行的命令数限制在3个,但能够同时执行的命令数只要在1个以上,用本发明就能获得一部分效果。

执行条件不成立计数器450包括地址解码器437、比较数值寄存器451、计数器寄存器452、加法器453、多路转换器454、比较器455和中断控制单元460。

中断控制单元460包括禁止标记461和有效标记462。

执行条件不成立计数器450内的地址解码器437具备以从总线33接受的控制信号、地址和数据为基础改写比较数值寄存器451、禁止标记461和有效标记462的内容的单元。由此,命令执行单元432可以通过总线33访问比较数值寄存器451、禁止标记461和有效标记462。

中断信号生成单元470每一个周期都从中断判断标记490~492和有效标记496~498接受输入,根据输入将条件不成立的命令数、命令执行信号、中断通过信号和中断检测信号输出给执行条件不成立计数器。

中断控制单元436从中断控制单元460中接受中断插入信号,对命令执行单元432输出要求中断的信号。命令执行单元432接受中断插入要求信号中断命令的执行,程序执行装置406将调试对象程序被中断的信息作为应答通知给程序调试装置402。

<第4实施形态的程序调试装置402的结构>

本发明的第4实施形态的程序调试装置402的基本结构表示在图29中。

本发明的第4实施形态的程序调试装置402与本发明的第1实施形态的程序调试装置2基本相同,只有在不具备跳跃标记保持单元21、具备用来将值设定到比较数值寄存器451中的通过命令计数器422来取代通过命令计数器22这些点不同。因此,对于程序调试装置402的结构,与程序调试装置2相同的部分的说明省略。

<第4实施形态的执行条件不成立计数器450的结构>

将在程序调试装置402所具备的通过命令计数器422中设定的值,设定在图29所示的执行条件不成立计数器450所具备的比较数值寄存器451中。

计数器寄存器452在每个周期内用多路转换器454输出的值更新计数器寄存器452自身的内容。

加法器453计数计数器寄存器452的内容和中断信号生成单元输出的条件不成立的命令数,输入到多路转换器454中。

当中断控制单元460输出的有效信号为0(无效)时多路转换器454输出0,当中断控制单元460输出的有效信号为1(有效)时多路转换器454输出加法器453的输入。

多路转换器454输出的值和比较数值寄存器451的值被输入比较器455中,当多路转换器454输出的值比比较数值寄存器451的值大时,将1(有效)输出给中断控制单元460;当多路转换器454输出的值比比较数值寄存器451的值小时,将0(无效)输出给中断控制单元460。

如果采用上述结构,当中断控制单元460输出的有效信号为1(有效)时,将条件不成立的命令数加算到计数器寄存器452的值中;当中断控制单元460输出的有效信号为0(无效)时将计数器寄存器452复位。

即,执行条件不成立计数器450采用当中断控制单元460输出的有效信号为1(有效)时计数条件不成立的命令数,当中断控制单元460输出的有效信号为0时将其计数复位的结构。

<第4实施形态的中断信号生成单元470的结构>

图30所示的中断信号生成单元包括加法器471、“与”电路472~485和“或“电路486~488。

作为中断信号生成单元470的输入的命令X中断判断标记490、命令Y中断判断标记491和命令Z中断判断标记492,表示在命令执行单元432中同时执行的命令X、命令Y和命令Z中是否发生代码中断。当发生代码中断时用命令执行单元432设定为1(有效),当没有发生中断时设定为0。但是,但各命令不存在于命令执行单元432的执行阶段中时设定为0。

作为中断信号生成单元470的输入的命令X条件判断标记493、命令Y条件判断标记494和命令Z条件判断标记495表示在命令执行单元432中同时执行的命令X、命令Y和命令Z的执行条件是否成立。当各命令的执行条件成立、但各命令中不带执行条件时用命令执行单元432设定为1(有效),当各命令的执行条件不成立(即通过)时设定为0。但是,但各命令不存在于命令执行单元432的执行阶段中时设定为0。

作为中断信号生成单元470的输入的命令X有效标记496、命令Y有效标记497和命令Z有效标记498表示在命令执行单元432的执行阶段中是否存在命令X、命令Y和命令Z。当在命令执行单元432的执行阶段中各命令存在时设定为1(有效),当各命令不存在时设定为0。

这里所谓的“命令不存在”是指由于流水线失效等有效的命令不能提供给命令执行单元432的执行阶段的状态。

如图30所示,将各命令的条件判断标记493~495的反相值与各命令的命令有效标记496~498的值配对分别输入“与”电路472~474中。“与”电路472~474输出这些输入的逻辑积。

如果采用上述结构,当存在通过命令时,“与”电路472~474的输出为1,不存在时为0。

“与”电路472~474输出的值在加法器471中相加,从加法器471中输出。

如果采用上述结构,加法器471的输出为同时执行的通过命令的数量。

加法器471的输出作为条件不成立的命令数从中断信号生成单元470中传送给中断控制单元460。

如图30所示,将各命令的条件判断标记493~495的值与各命令的中断判断标记490~492的值配对分别输入“与”电路475~477中。“与”电路475~477输出这些输入的逻辑积。

如果采用上述结构,当命令执行并且产生中断时,“与”电路475~477的输出为1,否则为0。

“与”电路475~477的输出输入到“或”电路486中,“或”电路486输出输入的逻辑和。

如果采用上述结构,“或”电路486的输出为表示同时执行的命令中的某一个是否发生中断的信号。

“或”电路486的输出作为中断检测信号从中断信号生成单元470中传送给中断控制单元460。

如图30所示,将各命令的条件判断标记493~495的反相值与各命令的中断判断标记490~492的值配对分别输入“与”电路478~480中。“与”电路478~480输出这些输入的逻辑积。

如果采用上述结构,当命令通过并且成为中断对象时,“与”电路478~480的输出为1,否则为0。

“与”电路478~480输出输入到“或”电路487中,“或”电路487输出输入的逻辑和。

如果采用上述结构,“或”电路487的输出为表示同时通过的命令中的哪一个是中断对象的信号。

“或”电路487的输出作为中断通过信号从中断信号生成单元470中传送给中断控制单元460。

如图30所示,将各命令的条件判断标记493~495的值与各命令的中断判断标记490~492的反相值配对分别输入“与”电路481~483中。“与”电路481~483输出这些输入的逻辑积。

如果采用上述结构,当命令不为中断对象时“与”电路481~483的输出为1,否则为0。

将“与”电路481输出的值、命令Y中断判断标记491反相的值和命令Z中断判断标记492反相的值输入“与”电路484。

如果采用上述结构,当执行命令X并且命令Y和命令Z不发生中断时“与”电路484的输出为1,否则为0。

将“与”电路482输出的值和命令Z中断判断标记492反相的值输入“与”电路485。

如果采用上述结构,当执行命令Y并且命令Z不发生中断时“与”电路485的输出为1,否则为0。

“与”电路483~485输出的值输入“或”电路488,“或”电路488输出输入的逻辑和。

如果采用上述结构,“或”电路488的输出为表示在中断对象命令后执行的命令的信号。

“或”电路488的输出作为命令执行信号从中断信号生成单元470传送给中断控制单元460。

在命令X、命令Y和命令Z按照地址的高低顺序执行的程序执行装置406中,通过设置“与”电路472~474,能够正确地将命令X、命令Y和命令Z的顺序与中断对象的关系反映到命令执行信号中。

虽然本发明的第4实施形态的命令执行单元432具备同时执行3个命令的单元,但作为本发明的其他实施形态,在命令执行单元只执行1个命令的情况下,也可以只留下与命令X有关的装置,“与”电路472、475、478和481的输出分别作为条件不成立命令数、中断检测信号、中断通过信号和命令执行信号。

虽然本发明的第4实施形态的命令执行单元432只能够同时执行3个命令,但作为本发明的其他实施形态,即使在命令执行单元具备同时执行2个或4个以上的命令的单元时,也能够容易地从本发明的第3实施形态类推。

<第4实施形态的中断控制单元460的结构>

图31所示的中断控制单元460包括禁止标记461、有效标记462、“与”电路463~465,“或”电路466~468。

禁止标记461或有效标记462可以由命令执行单元432或程序调试装置402任意地改写。

在程序调试装置402执行调试对象程序时,有效标记462用程序调试装置402设定为0(无效)。

“与”电路463以中断通过信号和通过命令数超过信号作为输入,将输入的逻辑积输出。

如果采用上述结构,在将比较数值寄存器的值设定为0,同时检测中断通过信号时“与”电路463的输出为1(有效)。

“与”电路464以有效标记462和通过命令数超过信号作为输入,将输入的逻辑积输出。

如果采用上述结构,在计数器寄存器452的值有效且计数器寄存器452的值在比较数值寄存器451的值以上的情况下,“与”电路464的输出为1(有效),否则为0(无效)。

“或”电路466将中断检测信号、“与”电路463和“与”电路464作为输入,将输入的逻辑和输出。

中断控制单元460将“或”电路466的输出作为中断插入信号。

如果采用上述结构,在检测断点时,当计数器寄存器452的值有效时通过命令数在比较数值寄存器451的值以上时,而且使比较数值寄存器451的值为0的情况下,在检测到设定在通过命令中的断点时能够生成中断插入信号。即,通过使比较数值寄存器451的值为0,即使在通过命令中设定的断点上也能够产生中断插入,能够容易地变更断点的功能。

“或”电路467将命令执行信号和禁止标记461作为输入,输出输入的逻辑和。

“或”电路468将中断通过信号和有效标记462作为输入,输出输入的逻辑和。

“与”电路465将“或”电路466的输出的反相值、“或”电路467的输出的反相值和“或”电路468的输出作为输入,“与”电路465输出输入的逻辑积。

有效标记462将“与”电路465的输出作为输入,在每个周期的时钟的边缘时刻更新有效标记462的值。

如果采用上述结构,当中断插入信号或命令执行信号为1(有效)或禁止标记461为1(有效)时,有效标记462为0(无效)。并且,当中断插入信号、命令执行信号和禁止标记461全部为0(无效),且中断通过信号为1(有效)或有效标记462已经为1(有效)时,有效标记462为1(有效)。

即,能够用禁止标记461禁止有效标记462为1(有效),在检测到通过命令中设定的断点时使计数器寄存器452的值有效。

如果采用上述中断控制单元460的结构,能够在通过断点以后连续执行超过设定在比较数值寄存器451中的次数的通过命令数生成中断插入,即使在如图32所示那样在通过命令连续不断的地方设定断点的情况下,也因为在通过断点后,调试对象程序在一定的范围内中断,因此调试对象程序不会在调试作业者预想范围以外的地方中断,提高调试作业的效率。

另外,虽然在本发明的第4实施形态中用加法器453将条件不成立的命令数加算到计数器寄存器452的值中,但如果采用例如用加法器453将1加算到计数器寄存器452的值中的结构,如果在检测到通过断点后没有在设定到比较数值寄存器451中的周期数内执行的命令,则能够产生中断插入,由此,在通过断点以后,调试对象程序能够在一定的范围内中断,也可以与本发明的第4实施形态一样提高调试作业效率等,用加法器453改变加算到计数器寄存器452中的值。

生产上使用的可能性

本发明适用于与执行程序的数据处理装置或进行模拟的装置相连接的装置,特别是用来调试包含带执行条件的命令的程序的程序调式装置。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号