解释语言调试方法及装置的制作方法

文档序号:6564632阅读:182来源:国知局
专利名称:解释语言调试方法及装置的制作方法
技术领域
本发明涉及自动化测试技术领域,尤其涉及一种解释语言调试方法及装置。
背景技术
自动化测试过程中普遍采用解释语言,即通过编写解释语言的方法把测试过程记录下来,广泛应用在软件的回归测试、版本的预测试过程中。
现有调试技术在编写、调试解释语言程序的时候,由于逻辑或者语法的错误,如果解释语言中后面的某个地方出错,改正错误后,需要把前面的也运行一遍,才能到达上次出错的位置,已验证修改后解释语言是否正确,这样,就需要较长的时间才能完成调试。
现有调试技术虽然可以进行语句级的调试,但是不能对解释语言程序的断点进行上下文恢复,即,不能使解释语言程序直接跳转到程序的某个位置,而不真实执行前面部分的解释语言程序。这种调试技术,对于需要大量运行时间的测试类解释语言程序的调试,不能解决调试效率问题。
为了提高调试解释语言程序的效率,现有的解释语言程序调试技术中普遍采用了“插桩”调试的方法,即在解释语言程序每个最小执行单元插入额外的代码,在此基础上,用户对于解释语言可以进行语句级的调试。包括断点,单步,进入函数,跳过函数,跳出函数,从而对解释语言程序进行试。
但现有调试技术的“插桩”技术,是基于对解释语言程序进行语法分析,而实现一种解释语言的语法分析器,是一个复杂的软件工程,成本代价高。

发明内容
鉴于上述现有技术所存在的问题,本发明的目的是提供一种解释语言调试技术,本发明通过对解释语言程序上下文信息的保存和恢复,实现了在解释语言调试过程中快速跳转到解释语言程序断点所在位置继续运行,从而达到在低成本的条件下提高调试解释语言效率的目的。
本发明的目的是通过以下技术方案实现本发明提供了一种解释语言调试的方法,包括保存多个断点的上下文文件;选择需要跳转的断点,调用该断点的上下文文件,解释语言程序恢复到断点所在位置继续运行。
所述保存多个断点的上下文文件的步骤具体包括将解释语言程序按预设定的规则组织成多个段落;在每个段落结束时,保存运行完该段落的上下文信息到所述上下文文件。
所述选择需要跳转的断点,调用该断点的上下文文件,解释语言程序恢复到断点所在位置继续运行的步骤具体包括当调试解释语言程序时,选择需要跳转的断点;判断要跳转的断点的标识与段落的标识是否一致,如果一致,则加载该上下文文件的上下文信息。
本发明还提供了一种解释语言调试的装置,包括保存模块用于在解释语言程序执行过程中,保存多个断点的上下文文件;恢复模块调用该断点的上下文文件,使解释语言程序恢复到断点所在位置。
由上述本发明提供的技术方案可以看出,本发明通过对解释语言上下文信息的保存与恢复,实现了快速跳转到解释语言程序断点所在位置,恢复上下文,继续运行,达到在低成本的条件下快速有效的调试解释语言的目的。


图1为本发明实施例所述方法的流程示意图;图2为本发明实施例中的GUI界面图;图3为本发明实施例中上下文保存函数的内部实现过程示意图;图4为本发明实施例中的装置结构图。
具体实施例方式
本发明实施例是通过保存解释语言程序断点的上下文信息到上下文文件,实现了解释语言调试过程中快速跳转到解释语言程序中的指定位置,从而达到在低成本的条件下提高调试解释语言程序效率的目的。
本发明实施例适用于所有解释执行的解释语言,这里为了说明方便,以测试业界普遍采用的Tcl(工具命令语言)、itcl(面向对象的工具命令语言)语言为例进行说明。
下面结合附图和附图2对本发明实施例所述的方法进行详细说明。
步骤11、保存多个断点的上下文文件;在本发明实施例的具体实现中,可以在解释语言程序中,按照预设定的规则将解释语言程序划分成多个段落,通常可以将这样的一个段落称为一个<STEP>,各<STEP>之间通常是顺序执行的结构。
对于上下文的保存与断点恢复,可以基于<STEP>为最小单位,对于每个<STEP>内部的解释语言规模,用户通常根据所完成的功能进行划分,用户的tcl测试解释语言程序通常如下形式<STEP>完成X功能{...
...←这里是具体的tcl测试解释语言程序段}<STEP>完成XX功能{...←这里是具体的tcl测试解释语言程序段}<STEP>完成XXX功能{....
....
...←这里是具体的tcl测试解释语言程序段}...
<STEP>过程定义如下语法<STEP>description code详细说明description为测试步骤的描述,不可为空;code为该步骤的执行代码,建议写在{}之中,可以在括号之中使用解释语言程序中定义的变量。
一般情况下,在进行解释语言程序编写的时候,都是由用户把完成一部分功能的解释语言用不同的<STEP>进行组织,这样,更利于方便用户调试。但实际上,本发明实施例中也可以利用机器自动将解释语言程序划分成若干个<STEP>。
<STEP>通过tcl过程(proc)实现,在每个<SETP>的结束的时候,自动保存运行完当前<STEP>程序所有变量,类,对象的上下文到断点上下文文件,文件名以<STEP>的description来标识。这样,解释语言程序在执行过程中,会形成若干断点上下文文件,在每个<STEP>的开头决定该<STEP>是被真实执行,还是从断点上下文文件加载上次运行的上下文信息。
步骤12、调用断点的上下文文件,解释语言程序恢复到断点所在位置继续运行;解释语言程序运行的时候,通常会通过一个GUI(图形用户接口)界面,用户可以设定准备跳转的断点。GUI界面如图2所示在这里,用户设定了四个断点,在界面上分别显示断点标识为1、RTA Ping PC;2、RTB pingPC;3、RTA Ping RTB;4、RTB ping RTA;如果用户选择了某个断点,GUI会将要跳转的标识生成到一个配置文件中,判断要跳转的断点的标识与<STEP>的标识的description是否一致,如果一致,则加载该上下文文件的上下文信息。
本发明实施例中,断点文件所采用的语法就是该解释语言的语法;下面对利用本发明实施例的方法生成的断点的上下文文件的格式进行详细说明。
具体的说就是,一般解释语言都提供运行时刻加载执行解释语言的命令,如tcl语言是eval或者source命令,为了便于恢复断点的处理,本发明中实施例的上下文文件就采用本语言语法。
对于普通变量,名字空间(namespace)中的变量,数组,类中的public,变量,通过简单的赋值语句实现,生成的上下文文件如下所示(此处为算法自动生成的代码,不是算法代码本身)。
set r_band{1000}array set class_rtEntryv6{RTB,lo1{}RTC,lo1{}RTA,tunne10{}RTA,lo1{}}set::CTestException::m_bTraceFlag{0}对于类中的private,protect类型的变量,采用动态生成该类,或者其基类的构造函数,在构造函数中进行初始化,然后生成该对象,最后恢复原构造函数的方法进行,下面对CVtpTerminal类中private变量的恢复过程举例说明首先生成构造函数(constructor),例如CVtpTerminal类的构造函数,然后在该构造函数中进行初始化,生成对象(object),最后恢复原构造函数。
下面结合附图4对本发明实施例所述的装置进行阐述。
本发明实施例所述的装置具体包括保存模块和恢复模块;保存模块用于在解释语言程序执行过程中,保存多个断点的上下文文件;恢复模块调用该断点的上下文文件,使解释语言程序恢复到断点所在位置。
这两个模块在实现时通常都是以函数的形式执行操作的。即在保存每个<STEP>的上下文信息到断点上下文文件时候一般是通过上下文保存函数实现的,而在读入并执行断点上下文文件的时候一般时通过上下文恢复函数实现的,下面对这两个函数进行详细说明。
1、上下文保存函数proc atf_debug_save_context fn参数,文件名功能,保存当时tcl解释语言解释器的上下文信息到指定文件其内部实现的过程如图3所示,整个处理包括两步,第一步,生成系统内所有变量的上下文对普通变量和数组分别处理,通过tcl的info vars*命令遍历解释器内的所有变量,逐一查询当前的值。由于数组和普通变量的访问方法不同,事先需要通过array exists判断该变量是否为数组。
对不同names pace中变量的处理,通过tcl的namespace children命令查询解释器内的所有名字空间,然后,在不同的名字空间上遍历所有变量,并记录相应变量的值。
对需要特殊处理的变量的处理,对于不希望保存的变量事先保存在一个链表中,如,为实现本算法的一些内部变量,如约定使用atf_debug_开头,则这些变量的值不能被记录。此外,还有一些需要和外部设备打交道的值,如,文件句柄,设计外部设备的一些tcl扩展命令,这些变量,如果保存了当前值,下次恢复的时候通常是无效的句柄,所以,对于这类变量,要单独处理,具体方法是事先注册一个“变量-回调函数”表,当遇到这样的变量的时候,算法调用回调函数,进行特殊处理,而不是简单的恢复变量的值。如,解释语言程序中存在文件句柄变量handle,可以把这个变量注册成特殊变量,相应的回调函数可以是真实的打开一个文件,而不是简单的保存当时handle的值。
这样,在断点恢复的时候,就不会简单的恢复一个无效的句柄,而是真实的打开了文件。
第二步,生成系统内所有对象的上下文,这是指对于Itcl,类和对象的恢复。Itcl解释语言中,所有的类和对象都是全局的,通过::itcl::findobjects*命令可以遍历解释器内所有的对象,对象中的变量,对public类型变量的处理,比较简单,因为外部可见,变量的值可以直接得到,当然也要考虑数组和一般变量的访问方式。对private类型变量,只有对象内部可见,分为本类和基类两种情况处理,对于基类中私有变量,要回溯到初始定义该变量的基类,生成的上下文要放到基类定义的构造函数中。对本类的私有变量和对protect类型变量的处理相同,生成的上下文要放到本类定义的构造函数中即可,不用回溯基类中的定义。
2、上下文恢复函数proc atf_debug_restore_context参数,全局变量,atf_debug_fn,保存要恢复的断点上下文文件名。
功能,完成上下文文件的读入并执行,使得当前解释语言解释器的上下文恢复到上次保存的状态。
保存的上下文本身以tcl,itcl语言形式,对于上下文的恢复比较简单,通过source命令装入并执行上下文解释语言程序即可。
至此,本发明实施例仅以Tcl、itcl为例说明了这种解释语言调试方法,但本领域的技术人员都应该知道,所有解释执行的解释语言都适用于本发明实施例所述的方法。
以上所述,仅为本发明较佳的具体实施方式
,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。
权利要求
1.一种解释语言调试的方法,其特征在于,包括保存多个断点的上下文文件;选择需要跳转的断点,调用该断点的上下文文件,解释语言程序恢复到断点所在位置继续运行。
2.根据权利要求1所述的方法,其特征在于,所述保存多个断点的上下文文件的步骤具体包括将解释语言程序按预设定的规则组织成多个段落;在每个段落结束时,保存运行完该段落的上下文信息到所述上下文文件。
3.根据权利要求2所述的方法,其特征在于,所述上下文信息包括变量、类和对象的上下文。
4.根据权利要求3所述的方法,其特征在于,所述保存运行完该段落的上下文信息到所述上下文文件的步骤具体包括生成系统内所有变量的上下文;生成系统内所有对象的上下文。
5.根据权利要求1所述的方法,其特征在于,所述选择需要跳转的断点,调用该断点的上下文文件,解释语言程序恢复到断点所在位置继续运行的步骤具体包括当调试解释语言程序时,选择需要跳转的断点;判断要跳转的断点的标识与段落的标识是否一致,如果一致,则加载该上下文文件的上下文信息。
6.根据权利要求5所述的方法,其特征在于,所述判断要跳转的断点的标识与段落的标识是否一致,如果一致,则加载该上下文文件的上下文信息的步骤具体包括在段落的开头判断是否从断点上下文件加载其保存的上下文信息,当确定从断点上下文文件加载其保存的上下文信息时,判断要跳转的断点的标识与段落的标识是否一致,如果一致,则加载该上下文文件的上下文信息的。
7. 根据权利要求1到6中任意一项所述的方法,其特征在于,所述上下文文件采用的语法是该解释语言的语法。
8.一种解释语言调试的装置,其特征在于,包括保存模块用于在解释语言程序执行过程中,保存多个断点的上下文文件;恢复模块调用该断点的上下文文件,使解释语言程序恢复到断点所在位置。
全文摘要
本发明涉及一种解释语言调试的方法及装置。本发明所述的方法包括保存多个断点的上下文文件;选择需要跳转的断点,调用该断点的上下文文件,解释语言程序恢复到断点所在位置继续运行。本发明所述的装置包括保存模块用于在解释语言执行过程中,保存多个断点的上下文文件;恢复模块调用该断点的上下文文件,使解释语言程序恢复到断点所在位置。本发明通过对解释语言程序上下文信息的保存和恢复,实现了在解释语言调试过程中快速跳转到解释语言程序断点所在位置继续运行,从而达到在低成本的条件下提高调试解释语言效率的目的。
文档编号G06F11/36GK101021812SQ20061017025
公开日2007年8月22日 申请日期2006年12月21日 优先权日2006年12月21日
发明者韩振富, 许永利 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1