CN104657266A - 基于脚本的源代码插桩***及方法 - Google Patents
基于脚本的源代码插桩***及方法 Download PDFInfo
- Publication number
- CN104657266A CN104657266A CN201510070401.9A CN201510070401A CN104657266A CN 104657266 A CN104657266 A CN 104657266A CN 201510070401 A CN201510070401 A CN 201510070401A CN 104657266 A CN104657266 A CN 104657266A
- Authority
- CN
- China
- Prior art keywords
- source code
- pitching pile
- script
- pitching
- logic
- 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.)
- Pending
Links
Landscapes
- Stored Programmes (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明公开一种基于脚本的源代码插桩***及方法,包括源代码插桩前端模块、源代码类型分析器适配模块、插桩逻辑管理模块、插桩执行流程管理模块,所述源代码插桩前端模块提供用户脚本的程序,使用者通过命令行驱动插桩过程的执行;所述源代码类型分析器适配模块,针对不同源代码类型产生源代码的语法树信息;所述插桩逻辑管理模块,基于脚本对插桩逻辑进行定制;所述插桩执行流程管理模块,是插桩执行过程的驱动逻辑,通过此逻辑完成各个模块的协调调用。本发明采用通用的源代码插桩解决方案,并且基于脚本的特性可以让***在针对不同的源代码插桩方案都具有很好的扩展性,源代码插桩定制灵活。
Description
技术领域
本发明涉及一种计算机数据处理技术,更具体的说,涉及一种基于脚本的源代码插桩***及方法。
背景技术
在诸多***中,都有对源代码进行插桩或行为调整的需求,例如在白盒测试中,希望知道哪些代码、分支的覆盖率,从而评估当前测试的完整性。而诸多***中都有各自的源代码插桩方案,不同的源代码类型也可能有不同的插桩方案,例如DT10测试设备中的源代码插桩采用的是固定方式,不能够灵活调整,用户在希望只针对函数性能测试的时候,没有办法做到中间源代码不插桩。
发明内容
本发明针对上述现有技术中存在的技术问题,提供一种基于脚本的源代码插桩***及方法,可以灵活调整源代码插桩方案,具有非常好的扩展性,能够针对不同的源代码采用通用的源代码插桩解决方案,并且基于脚本的特性可以让***在针对不同的源代码插桩方案都具有很好的扩展性,源代码插桩定制灵活。
为达到上述目的,本发明所采用的技术方案如下:
一种基于脚本的源代码插桩***,包括源代码插桩前端模块、源代码类型分析器适配模块、插桩逻辑管理模块、插桩执行流程管理模块,所述源代码插桩前端模块提供用户脚本的程序,使用者通过命令行驱动插桩过程的执行;所述源代码类型分析器适配模块,针对不同源代码类型产生源代码的语法树信息;所述插桩逻辑管理模块,基于脚本对插桩逻辑进行定制;所述插桩执行流程管理模块,是插桩执行过程的驱动逻辑,通过此逻辑完成各个模块的协调调用。
所述源代码类型分析器适配模块能扩展添加新的源代码类型分析器。
所述插桩逻辑根据用户要求定制。
一种基于脚本的源代码插桩方法,通过上述的***完成,包括步骤如下:
首先,用户通过源代码插桩前端模块将需要处理的源代码、通过插桩逻辑管理模块定制的插桩逻辑交给源代码插桩***;
其次,源代码插桩***通过源代码类型分析器适配模块,针对源代码的类型匹配对应的源代码类型分析器,对源代码进行语法分析,并将结果转换为***内语法信息数据格式;
最后,通过插桩逻辑管理模块的插桩处理过程,将用户自定义的插桩逻辑***到源代码逻辑中,最终生成一个插桩后的源代码。
本发明所采用的技术方案,对于用户来说,只需要实施两个步骤即可完成,定制源代码插桩逻辑,调用源代码插桩***将定制的插桩逻辑应用到目标源代码中。因此,本发明技术方案能够针对不同的源代码采用通用的源代码插桩解决方案,并且基于脚本的特性可以让***在针对不同的源代码插桩方案都具有很好的扩展性,源代码插桩定制灵活。
附图说明
通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
图1是本发明所提供的方法流程图。
具体实施方式
下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进。这些都属于本发明的保护范围。
本发明所提供的基于脚本的源代码插桩***,包括源代码插桩前端、源代码类型分析器适配、插桩逻辑管理、插桩执行流程管理四大模块。
源代码插桩前端模块,提供了一个与用户交互的程序,使用者通过命令行驱动插桩过程的执行。
源代码类型分析器适配模块,是一个比较统称的模块,实际上它由很多的扩展模块构成,每一个模块针对一个源代码类型。这个模块对匹配的源代码语法结构有很深的了解,可以通过对源代码的语法规则进行分析,将源码提取为语法树结构,对这种语法数据结构定义了通用的表达规范,任何一种源代码类型,生成的语法树会大致相同。基于这样的基础可以定义出相对比较通用的插桩脚本。
插桩逻辑管理模块,是可定制的插桩逻辑模块,本质上可以使用任意一种脚本语言来实现,本实施例支持的是lua脚本语言。本发明定义的语法树形式是一种可逆的结构定义,修改这个语法树的结构,本质上就是间接的修改了最终插桩后的源代码,从这一点上来说,这个模块的功能非常强大,可以***新的语句,可以修改现有源代码的逻辑结构。它的实现方式是,用户在脚本文件中编写感兴趣节点的处理函数,然后注册这些函数给插桩执行流程管理模块,最终的插桩执行流程管理模块在进行源代码插桩的步骤中,调用用户编写的语法树节点处理函数,实现最终源代码插桩的目的。
插桩执行流程管理,是插桩执行过程的驱动逻辑,通过此逻辑完成各个模块的协调调用。
如图1所示,本发明所提供的基于脚本的源代码插桩方法流程图,首先,用户通过源代码插桩前端将需要处理的源代码、插桩逻辑交给源代码插桩***,然后,源代码插桩***通过源代码的类型匹配对应的源代码分析器,对源代码进行语法分析,并将结果转换为***内语法信息数据格式,最后通过插桩逻辑管理模块的插桩处理过程,将用户自定义的插桩逻辑***到源代码逻辑中,最终生成一个插桩后的源代码。
对于用户来说,具体实施过程大致分两个步骤:定制源代码插桩逻辑,调用源代码插桩***将定制的插桩逻辑应用到目标源代码中。这里为了进一步对过程进行解释,举例进行说明,假设有一个项目的代码,为了对项目进行错误发生时情况执行函数堆栈监控,需要在每个函数的入口***一条特殊的语句,并且还希望能够将所有的内存分配、释放进行监控,那么就要同时将内存分配、释放的函数调用更改为其他的函数调用,这样可以在更改后的内存分配、释放函数中做内存监控,从而确定出***是否存在内存泄漏问题。基于这样一个假设性的例子,具体如何实施?首先在脚本中定义本实施例的插桩逻辑,代码大概如下:
--处理函数入口***语句的脚本
--处理更改函数调用的脚本
这里只是列出了部分核心定制脚本,用来说明例子,原始的代码如下:
那么按流程执行插桩后结果如下:
从这一点上来说,用户对于插桩的需求是非常多样化的,而目前基本没有可以灵活帮用户进行各种插桩定制的工具,本发明提供了简单的,有效地插桩定制方式,帮助用户灵活的解决各种插桩需求。
以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变形或修改,这并不影响本发明的实质内容。
Claims (6)
1.一种基于脚本的源代码插桩***,其特征在于,包括源代码插桩前端模块、源代码类型分析器适配模块、插桩逻辑管理模块、插桩执行流程管理模块,所述源代码插桩前端模块提供用户脚本的程序,使用者通过命令行驱动插桩过程的执行;所述源代码类型分析器适配模块,针对不同源代码类型产生源代码的语法树信息;所述插桩逻辑管理模块,基于脚本对插桩逻辑进行定制;所述插桩执行流程管理模块,是插桩执行过程的驱动逻辑,通过此逻辑完成各个模块的协调调用。
2.根据权利要求1所述的基于脚本的源代码插桩***,其特征在于,所述源代码类型分析器适配模块根据源代码类型的不同能扩展添加新的匹配源代码类型分析器,通过对源代码的语法规则进行分析,将源代码提取为语法树结构,对这种语法数据结构定义通用的表达规范,任何一种源代码类型,生成的语法树大致相同,基于这样的基础定义出相对通用的插桩脚本。
3.根据权利要求1所述的基于脚本的源代码插桩***,其特征在于,所述插桩逻辑根据用户要求定制。
4.根据权利要求1所述的基于脚本的源代码插桩***,其特征在于,所述插桩逻辑管理模块能够***新的语句,同时能够修改现有源代码的逻辑结构。
5.一种基于脚本的源代码插桩方法,其特征在于,通过权利要求1至4中任一所述的***完成,包括步骤如下:
首先,用户通过源代码插桩前端模块将需要处理的源代码、通过插桩逻辑管理模块定制的插桩逻辑交给源代码插桩***;
其次,源代码插桩***通过源代码类型分析器适配模块,针对源代码的类型匹配对应的源代码类型分析器,对源代码进行语法分析,并将结果转换为***内语法信息数据格式;
最后,通过插桩逻辑管理模块的插桩处理过程,将用户自定义的插桩逻辑***到源代码逻辑中,最终生成一个插桩后的源代码。
6.根据权利要求5所述的基于脚本的源代码插桩方法,其特征在于,所述插桩逻辑管理模块的插桩处理过程的具体方法是:用户在脚本文件中编写感兴趣节点的处理函数,然后注册这些函数给插桩执行流程管理模块,最终的插桩执行流程管理模块在进行源代码插桩的步骤中,调用用户编写的语法树节点处理函数,实现最终源代码插桩的目的。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510070401.9A CN104657266A (zh) | 2015-02-10 | 2015-02-10 | 基于脚本的源代码插桩***及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510070401.9A CN104657266A (zh) | 2015-02-10 | 2015-02-10 | 基于脚本的源代码插桩***及方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN104657266A true CN104657266A (zh) | 2015-05-27 |
Family
ID=53248433
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510070401.9A Pending CN104657266A (zh) | 2015-02-10 | 2015-02-10 | 基于脚本的源代码插桩***及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104657266A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105468525A (zh) * | 2015-11-27 | 2016-04-06 | 苏州同元软控信息技术有限公司 | 基于c代码模型的构件接口单元测试方法 |
CN106874058A (zh) * | 2016-12-29 | 2017-06-20 | 中国航天***科学与工程研究院 | 一种基于源代码的程序自动插桩方法 |
CN110389895A (zh) * | 2019-06-14 | 2019-10-29 | 平安科技(深圳)有限公司 | 终端测试方法、装置、计算机设备和存储介质 |
CN111158667A (zh) * | 2020-01-02 | 2020-05-15 | 广州虎牙科技有限公司 | 代码注入方法和装置、电子设备及存储介质 |
CN116151597A (zh) * | 2023-04-20 | 2023-05-23 | 华能信息技术有限公司 | 一种基于私有云架构的快速插拔式流程管理方法及*** |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102419731A (zh) * | 2011-12-08 | 2012-04-18 | 北京控制工程研究所 | C语言嵌入式软件插桩及动态测试覆盖率信息提取方法 |
-
2015
- 2015-02-10 CN CN201510070401.9A patent/CN104657266A/zh active Pending
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102419731A (zh) * | 2011-12-08 | 2012-04-18 | 北京控制工程研究所 | C语言嵌入式软件插桩及动态测试覆盖率信息提取方法 |
Non-Patent Citations (2)
Title |
---|
郑晓梅: "一个基于Eclipse的通用Java程序插桩工具", 《计算机科学》 * |
陶永晶: "一种Java程序插桩语言及支撑工具", 《中国优秀硕士学位论文全文数据库信息科技辑》 * |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105468525A (zh) * | 2015-11-27 | 2016-04-06 | 苏州同元软控信息技术有限公司 | 基于c代码模型的构件接口单元测试方法 |
CN106874058A (zh) * | 2016-12-29 | 2017-06-20 | 中国航天***科学与工程研究院 | 一种基于源代码的程序自动插桩方法 |
CN110389895A (zh) * | 2019-06-14 | 2019-10-29 | 平安科技(深圳)有限公司 | 终端测试方法、装置、计算机设备和存储介质 |
CN111158667A (zh) * | 2020-01-02 | 2020-05-15 | 广州虎牙科技有限公司 | 代码注入方法和装置、电子设备及存储介质 |
CN116151597A (zh) * | 2023-04-20 | 2023-05-23 | 华能信息技术有限公司 | 一种基于私有云架构的快速插拔式流程管理方法及*** |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104657266A (zh) | 基于脚本的源代码插桩***及方法 | |
US10354031B2 (en) | Information processing by interpenetrating signal transmission channel in design for testability of chip | |
US8850395B2 (en) | Managing graphical user interface (GUI) objects in a testing environment | |
CN103970659B (zh) | 基于插桩技术的安卓应用软件自动化测试方法 | |
CN104598274B (zh) | 一种自动插桩编译安装方法及*** | |
JP2008176793A (ja) | ソフトウェアテストシステム、ソフトウェアのテスト方法、および、そのテスト方法を実行するためのプログラムを記録したコンピュータ読取り可能な記録媒体 | |
CN105260315A (zh) | 一种在嵌入式***进程中调试日志的方法 | |
CN105335137A (zh) | 用于处理源文件的方法和装置 | |
CN106021101A (zh) | 对移动终端进行测试的方法及装置 | |
CN109542444B (zh) | Java应用的监控方法、装置、服务器和存储介质 | |
US20190087160A1 (en) | System and method for creating domain specific language | |
CN113268243A (zh) | 内存预测方法及装置、存储介质、电子设备 | |
CN107122203B (zh) | 一种配置文件的设置方法及装置 | |
CN110221840B (zh) | 应用程序的功能实现方法及装置、设备及存储介质 | |
CN117520181B (zh) | 一种业务流程的调试方法、装置、电子设备及存储介质 | |
CN111858359B (zh) | 可执行文件的工程代码位置获取方法和装置 | |
CN110188071B (zh) | 数据处理方法、装置、电子设备和计算机可读介质 | |
CN105760293B (zh) | 多语言平台测试的方法和*** | |
US11663338B2 (en) | Automated security analysis of baseband firmware | |
CN109783133B (zh) | 代码打包方法、装置、计算机设备及存储介质 | |
CN113535581A (zh) | 测试脚本生成方法、装置、设备及计算机可读存储介质 | |
CN109408063B (zh) | 基于虚拟机的指令插桩方法及装置 | |
CN112612474A (zh) | 产品移植方法、装置、存储介质和电子设备 | |
CN112764761A (zh) | 一种程序中断文件解析方法、存储介质、电子设备及*** | |
CN111401020A (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 | ||
CB02 | Change of applicant information |
Address after: 201203 Shanghai City, Pudong New Area Chinese (Shanghai) free trade zone 498 GuoShouJing Road No. 14 building block 22301-985 Applicant after: Shanghai chuangkin Mdt InfoTech Ltd Address before: 201203 Shanghai Guo Shou Jing Road, Zhangjiang High Tech Park of Pudong New Area No. 498 Pudong Software Park building 14, block 22301-985 Applicant before: Upper SeaBird scape computer system company limited |
|
CB02 | Change of applicant information | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20150527 |
|
RJ01 | Rejection of invention patent application after publication |