CN100456260C - 一种用于对解释语言程序进行调试方法及装置 - Google Patents
一种用于对解释语言程序进行调试方法及装置 Download PDFInfo
- Publication number
- CN100456260C CN100456260C CNB2006101702539A CN200610170253A CN100456260C CN 100456260 C CN100456260 C CN 100456260C CN B2006101702539 A CNB2006101702539 A CN B2006101702539A CN 200610170253 A CN200610170253 A CN 200610170253A CN 100456260 C CN100456260 C CN 100456260C
- Authority
- CN
- China
- Prior art keywords
- breakpoint
- context
- interpretative code
- context file
- code program
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明涉及一种用于对解释语言程序进行调试的方法及装置。本发明所述的方法包括:保存多个断点的上下文文件;选择需要跳转的断点,调用该断点的上下文文件,解释语言程序恢复到断点所在位置继续运行。本发明所述的装置包括:保存模块:用于在解释语言执行过程中,保存多个断点的上下文文件;恢复模块:调用该断点的上下文文件,使解释语言程序恢复到断点所在位置。本发明通过对解释语言程序上下文信息的保存和恢复,实现了在解释语言调试过程中快速跳转到解释语言程序断点所在位置继续运行,从而达到在低成本的条件下提高调试解释语言效率的目的。
Description
技术领域
本发明涉及自动化测试技术领域,尤其涉及一种用于对解释语言程序进行调试方法及装置。
背景技术
自动化测试过程中普遍采用解释语言,即通过编写解释语言的方法把测试过程记录下来,广泛应用在软件的回归测试、版本的预测试过程中,。
现有调试技术在编写、调试解释语言程序的时候,由于逻辑或者语法的错误,如果解释语言中后面的某个地方出错,改正错误后,需要把前面的也运行一遍,才能到达上次出错的位置,已验证修改后解释语言是否正确,这样,就需要较长的时间才能完成调试。
现有调试技术虽然可以进行语句级的调试,但是不能对解释语言程序的断点进行上下文恢复,即,不能使解释语言程序直接跳转到程序的某个位置,而不真实执行前面部分的解释语言程序。这种调试技术,对于需要大量运行时间的测试类解释语言程序的调试,不能解决调试效率问题。
为了提高调试解释语言程序的效率,现有的解释语言程序调试技术中普遍采用了“插桩”调试的方法,即在解释语言程序每个最小执行单元插入额外的代码,在此基础上,用户对于解释语言可以进行语句级的调试。包括:断点,单步,进入函数,跳过函数,跳出函数,从而对解释语言程序进行试。
但现有调试技术的“插桩”技术,是基于对解释语言程序进行语法分析,而实现一种解释语言的语法分析器,是一个复杂的软件工程,成本代价高。
发明内容
鉴于上述现有技术所存在的问题,本发明的目的是提供一种用于对解释语言程序进行调试的技术,本发明通过对解释语言程序上下文信息的保存和恢复,实现了在解释语言调试过程中快速跳转到解释语言程序断点所在位置继续运行,从而达到在低成本的条件下提高调试解释语言效率的目的。
本发明的目的是通过以下技术方案实现:
本发明提供了一种用于对解释语言程序进行调试的方法,包括:
保存多个断点的上下文文件;
选择需要跳转的断点,调用该断点的上下文文件,解释语言程序恢复到断点所在位置继续运行。
所述保存多个断点的上下文文件的步骤具体包括:
将解释语言程序按预设定的规则组织成多个段落;
在每个段落运行结束时,保存运行完该段落的上下文信息到所述上下文文件。
所述选择需要跳转的断点,调用该断点的上下文文件,解释语言程序恢复到断点所在位置继续运行的步骤具体包括:
当调试解释语言程序时,选择需要跳转的断点;
判断要跳转的断点的标识与段落的标识是否一致,如果一致,则加载该上下文文件的上下文信息。
本发明还提供了一种用于对解释语言程序进行调试的装置,包括:
保存模块:用于在解释语言程序执行过程中,保存多个断点的上下文文件;
恢复模块:用于选择需要跳转的断点,调用该断点的上下文文件,使解释语言程序恢复到断点所在位置。
由上述本发明提供的技术方案可以看出,本发明通过对解释语言上下文信息的保存与恢复,实现了快速跳转到解释语言程序断点所在位置,恢复上下文,继续运行,达到在低成本的条件下快速有效的调试解释语言的目的。
附图说明
图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,lol {} RTC,lol{}RTA,tunnel0{}RTA,lol{}}
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判断该变量是否为数组。
对不同namespace中变量的处理,通过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为例说明了这种解释语言调试方法,但本领域的技术人员都应该知道,所有解释执行的解释语言都适用于本发明实施例所述的方法。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。
Claims (8)
1、一种用于对解释语言程序进行调试的方法,其特征在于,包括:
保存多个断点的上下文文件;
选择需要跳转的断点,调用该断点的上下文文件,解释语言程序恢复到断点所在位置继续运行。
2、根据权利要求1所述的方法,其特征在于,所述保存多个断点的上下文文件的步骤具体包括:
将解释语言程序按预设定的规则组织成多个段落;
在每个段落运行结束时,保存运行完该段落的上下文信息到所述上下文文件。
3、根据权利要求2所述的方法,其特征在于,所述上下文信息包括:变量、类和对象的上下文。
4、根据权利要求3所述的方法,其特征在于,所述保存运行完该段落的上下文信息到所述上下文文件的步骤具体包括:
生成系统内所有变量的上下文;
生成系统内所有对象的上下文。
5、根据权利要求2所述的方法,其特征在于,所述选择需要跳转的断点,调用该断点的上下文文件,解释语言程序恢复到断点所在位置继续运行的步骤具体包括:
当调试解释语言程序时,选择需要跳转的断点;
判断要跳转的断点的标识与段落的标识是否一致,如果一致,则加载该上下文文件的上下文信息。
6、根据权利要求5所述的方法,其特征在于,所述判断要跳转的断点的标识与段落的标识是否一致,如果一致,则加载该上下文文件的上下文信息的步骤具体包括:
在段落的开头判断是否从断点上下文文件加载其保存的上下文信息,当确定从断点上下文文件加载其保存的上下文信息时,判断要跳转的断点的标识与段落的标识是否一致,如果一致,则加载该上下文文件的上下文信息。
7、根据权利要求1到6中任意一项所述的方法,其特征在于,所述上下文文件采用的语法是该解释语言的语法。
8、一种用于对解释语言程序进行调试的装置,其特征在于,包括:
保存模块:用于在解释语言程序执行过程中,保存多个断点的上下文文件;
恢复模块:用于选择需要跳转的断点,调用该断点的上下文文件,使解释语言程序恢复到断点所在位置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2006101702539A CN100456260C (zh) | 2006-12-21 | 2006-12-21 | 一种用于对解释语言程序进行调试方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2006101702539A CN100456260C (zh) | 2006-12-21 | 2006-12-21 | 一种用于对解释语言程序进行调试方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101021812A CN101021812A (zh) | 2007-08-22 |
CN100456260C true CN100456260C (zh) | 2009-01-28 |
Family
ID=38709586
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2006101702539A Expired - Fee Related CN100456260C (zh) | 2006-12-21 | 2006-12-21 | 一种用于对解释语言程序进行调试方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100456260C (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101727345B (zh) * | 2008-10-29 | 2013-09-04 | 国际商业机器公司 | 控制动态链接库dll加载状态的方法和系统 |
CN102262587B (zh) * | 2011-07-22 | 2014-12-31 | 中国科学院声学研究所 | 一种断点调试方法和调试器 |
CN104331316B (zh) * | 2014-11-28 | 2017-11-24 | 中国农业银行股份有限公司 | 一种代码压缩方法及系统 |
CN105808214B (zh) * | 2014-12-29 | 2019-03-08 | 高德软件有限公司 | 一种数据编译方法和地图编译器 |
CN106681897B (zh) * | 2015-11-06 | 2020-10-16 | 北京国双科技有限公司 | 一种代码调试方法及装置 |
CN108536613B (zh) * | 2018-03-08 | 2022-09-16 | 创新先进技术有限公司 | 数据清理方法、装置、及服务器 |
CN109117378B (zh) * | 2018-08-31 | 2020-02-14 | 百度在线网络技术(北京)有限公司 | 用于显示信息的方法和装置 |
CN109194567B (zh) * | 2018-08-31 | 2020-06-09 | 百度在线网络技术(北京)有限公司 | 用于重发信息的方法和装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6077312A (en) * | 1998-05-06 | 2000-06-20 | International Business Machines Corporation | Apparatus, program product and method of debugging utilizing a context sensitive breakpoint |
CN1271896A (zh) * | 1999-04-23 | 2000-11-01 | 太阳微系统有限公司 | 调试优化代码的方法和设备 |
CN1369802A (zh) * | 2001-02-14 | 2002-09-18 | 英业达股份有限公司 | 记录并自动恢复流程状态的方法 |
US20040128655A1 (en) * | 2002-12-26 | 2004-07-01 | International Business Machines Corporation | Method, system, and article of manufacture for debugging utilizing screen pattern recognition and breakpoints |
CN1645339A (zh) * | 2005-01-31 | 2005-07-27 | 浙江大学 | 在嵌入式系统模拟器上调试应用程序的方法 |
-
2006
- 2006-12-21 CN CNB2006101702539A patent/CN100456260C/zh not_active Expired - Fee Related
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6077312A (en) * | 1998-05-06 | 2000-06-20 | International Business Machines Corporation | Apparatus, program product and method of debugging utilizing a context sensitive breakpoint |
CN1271896A (zh) * | 1999-04-23 | 2000-11-01 | 太阳微系统有限公司 | 调试优化代码的方法和设备 |
CN1369802A (zh) * | 2001-02-14 | 2002-09-18 | 英业达股份有限公司 | 记录并自动恢复流程状态的方法 |
US20040128655A1 (en) * | 2002-12-26 | 2004-07-01 | International Business Machines Corporation | Method, system, and article of manufacture for debugging utilizing screen pattern recognition and breakpoints |
CN1645339A (zh) * | 2005-01-31 | 2005-07-27 | 浙江大学 | 在嵌入式系统模拟器上调试应用程序的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN101021812A (zh) | 2007-08-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100456260C (zh) | 一种用于对解释语言程序进行调试方法及装置 | |
CN101587455B (zh) | 一种用于vxWorks操作系统检查内存泄漏的方法 | |
CN100386743C (zh) | 一种嵌入式系统的调试方法及其系统 | |
US9274930B2 (en) | Debugging system using static analysis | |
CN102118281B (zh) | 自动化测试方法、装置及网络设备 | |
CN105094783A (zh) | 安卓应用稳定性测试的方法及装置 | |
CN102722440A (zh) | 一种嵌入式系统可执行代码的调试装置、调试方法及嵌入式系统 | |
EP2498178A1 (en) | Method and device for development environment converting | |
JP2007500401A (ja) | ソフトウェアデバッギング用装置とその方法 | |
CN112529206B (zh) | 一种模型运行方法和系统 | |
CN1248116C (zh) | 一种基于主机平台的嵌入式模块和子系统的通用测试装置 | |
CN102306122A (zh) | 自动化测试方法及设备 | |
CN110083360A (zh) | 一种应用程序代码的编译方法、装置、设备及存储介质 | |
CN102279789A (zh) | 生产阶段嵌入式系统的调试系统及其调试方法 | |
CN1627254A (zh) | 嵌入式系统的调试方法及其装置 | |
CN101226502A (zh) | 一种自动化测试方法及系统 | |
CN112230988A (zh) | 接口文档的生成方法、装置、计算机设备和存储介质 | |
CN110659088B (zh) | 一种嵌入式环境下程序扩展的方法及系统 | |
CN114924737A (zh) | 一种电池管理系统源代码集成测试方法、测试装置及电子设备 | |
CN103678099B (zh) | 一种实现硬件平台与软件平台通讯的方法以及装置 | |
CN102446134A (zh) | 一种实现编译器错误的自动定位方法和装置 | |
CN106560797A (zh) | 一种基于调试器的单元测试系统及方法 | |
CN101706752B (zh) | 一种软件错误现场定位的方法及装置 | |
CN115809076A (zh) | Ecu软件自动化集成方法及系统 | |
CN104572425B (zh) | 程序调试方法、装置及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20090128 Termination date: 20121221 |