CN103049504A - 基于源代码查询的半自动插桩方法 - Google Patents
基于源代码查询的半自动插桩方法 Download PDFInfo
- Publication number
- CN103049504A CN103049504A CN2012105320191A CN201210532019A CN103049504A CN 103049504 A CN103049504 A CN 103049504A CN 2012105320191 A CN2012105320191 A CN 2012105320191A CN 201210532019 A CN201210532019 A CN 201210532019A CN 103049504 A CN103049504 A CN 103049504A
- Authority
- CN
- China
- Prior art keywords
- pitching pile
- cppins
- command
- code
- instrumentation
- 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
- 238000000034 method Methods 0.000 title claims abstract description 93
- 230000008569 process Effects 0.000 claims abstract description 14
- 230000014509 gene expression Effects 0.000 claims description 37
- 230000008878 coupling Effects 0.000 claims description 19
- 238000010168 coupling process Methods 0.000 claims description 19
- 238000005859 coupling reaction Methods 0.000 claims description 19
- 230000015572 biosynthetic process Effects 0.000 claims description 9
- 238000003780 insertion Methods 0.000 claims description 4
- 230000037431 insertion Effects 0.000 claims description 4
- 238000010009 beating Methods 0.000 claims 1
- 238000012800 visualization Methods 0.000 abstract description 2
- 238000012986 modification Methods 0.000 abstract 1
- 230000004048 modification Effects 0.000 abstract 1
- 238000005516 engineering process Methods 0.000 description 10
- 230000006870 function Effects 0.000 description 7
- 239000000523 sample Substances 0.000 description 5
- 230000007246 mechanism Effects 0.000 description 4
- 238000004422 calculation algorithm Methods 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 230000000007 visual effect Effects 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 239000008186 active pharmaceutical agent Substances 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 239000003550 marker Substances 0.000 description 1
Images
Landscapes
- Stored Programmes (AREA)
Abstract
一种基于源代码查询的代码插桩方法,包括步骤:10:打开一个工程;11:通过在CppIns编辑器中输入相应的插桩命令;12:工具解析并执行插桩命令,得到所有符合条件的插桩点;13:审查所有插桩点的定义:若发现带有错误的插桩点,则进入步骤14对其进行修改;没有发现带有错误的插桩点,则直接进入步骤15;14:修改插桩的定义至正确;15:将插桩代码与原源文件合并生成新源文件。该方法主要特点为明确定义的代码查询和插桩命令、参数化的插桩语句模板、插桩代码可视化、插桩过程无痕化、插桩点自动化定位、自动插桩高效性等。
Description
技术领域
本发明主要用于计算机程序动态分析,主要涉及一种基于源代码查询的插桩方法。
背景技术
程序分析通常利用静态程序分析和动态程序分析对程序行为进行自动分析,进而提高软件质量。动态程序分析常借助于插桩方法来收集程序动态运行行为,某些与运行环境相关的程序行为只能通过插桩来收集,而静态程序分析无法进行分析。软件开发过程中,代码审查者在代码编写阶段完成后使用源代码插桩方法对代码进行审查,通常审查者拥有阅读源代码权限但不便对代码进行修改。通过对程序运行行为的分析尽早发现代码中的错误,进而提高软件质量。源代码插桩能够充分地利用程序语义、可视化地显示插桩代码、并且不会提高代码逻辑复杂性。
程序插桩技术,是在保证被测程序原有逻辑完整性的基础上在程序中插入一些探针,通过探针的执行并抛出程序运行的特征数据,通过对这些数据的分析,可以获得程序的控制流和数据流信息,进而得到逻辑覆盖等动态信息,从而实现测试目的的方法。由于程序插桩技术是在被测程序中插入探针,然后通过探针的执行来获得程序的控制流和数据流信息,以此来实现测试的目的。因此,根据探针插入的时间可以分为目标代码插桩和源代码插桩。CppIns是一个基于源代码查询的插桩方法及其软件工具,本申请人已经有过在先的专利申请和公开的软件申请。目前主要提供C++代码的代码查询和插桩功能。
现有插桩方法主要包括断言机制、字节码插桩、面向方面插桩等三类方法。断言机制直接在写源文件中添加插桩代码,将会降低代码阅读性。字节码插桩则直接对字节码文件进行修改,被插字节码的源代码无法可视化,且无法保证代码插入过程的正确性。面向方面插桩在程序纵向继承关系的基础上增加了横向方面关系,增加了程序的逻辑复杂性。
目前插桩技术主要存在的瓶颈主要有:插桩点及其代码非可视化、插桩点自动定位困难、难以做到插桩语句上下文敏感、自动插桩性能较低的问题。
发明内容
本发明目的是,鉴于上述问题,本发明旨在提供一个源代码插桩方法,尤其是基于源代码查询的半自动插桩方法。该方法结合代码查询技术,有效的将代码查询得到的插桩位置以及上下文内容与插桩机制相结合在一起。从源代码中提取相应的代码信息,在源代码信息中进行代码查询,按照插桩语句模板进行插桩语句定制,生成相应的插桩代码;最后将插桩代码和源文件合并输出带有插桩语句的C++源代码。
基于源代码查询的半自动插桩方法,采用如下步骤:
步骤10:打开一个被测源程序或源文件工程;
步骤11:通过在CppIns编辑器中输入相应的插桩命令;
步骤12:CppIns工具解析并执行插桩命令,得到所有符合条件的插桩点并生成对应的插桩代码;
步骤13:审查所有插桩点的定义:若发现带有错误的插桩点,则进入步骤14对其进行修改;没有发现带有错误的插桩点,则直接进入步骤15;
步骤14:修改插桩的定义至正确;
步骤15:将插桩代码与原源文件合并生成新源文件。
在步骤11中,其中输入相应的CppIns插桩命令过程包括:
步骤30:打开CppIns命令编辑器;
步骤31:判断是否需要对整个C++源文件工程或单个C++源文件进行插桩,如果是,则跳转到步骤32,如果不是,则跳转到步骤35;
步骤32:按照CppIns命令语法规则给出目标插桩点位置的CppIns命令描述;
步骤33:按照CppIns命令语法规则给出目标插桩点插桩语句的模板描述;
步骤34:将步骤32和步骤33得到的命令描述和模板描述的字符串输入到CppIns命令编辑器中;
步骤35:结束本次CppIns插桩命令;
在步骤12中,运行相应的CppIns插桩命令、得到所有的插桩点定义过程包括:
步骤40:从CppIns命令编辑器中获得CppIns命令字符串,即查询和插桩命令描述和插桩代码模板描述的字符串;
步骤41:从已经打开工程中的C++源代码中生成相应的代码信息,这些代码信息包括变量、语句、函数、类、表达式和运算符信息;
步骤42:对步骤40中得到的CppIns查询命令字符串进行语法检测和预处理得到检索指令;
步骤43:按照检索指令在步骤41中得到的代码信息中进行目标元素检索,得到相应的目标元素集合和相应的辅助元素集合构成的元素属性值;
步骤44:将CppIns命令中插桩模板的参数替换成步骤43中的元素属性值,得到相应的插桩语句集合;
步骤45:从步骤43中得到插桩位置以及从步骤44中得到的插桩语句集合,生成相应的插桩点;
在步骤41中,从源代码生成与CppIns命令字符串相应的代码信息的方式是:首先得到C++源代码或源文件相应的抽象语法树,在将语法树中的变量、语句、函数、类、表达式和运算符信息依次从语法树中抽取出来,形成表的数据结构。
步骤42中,其中检测和预处理即检查和检索准备工作的过程包括:
步骤601:匹配关键字find;
步骤602:匹配Target元素,并将其存放到对象target中;
步骤603:匹配关键satisfying;
步骤604:当匹配关键字exist成功或者匹配关键字all成功,则跳转步骤605,,否则跳转步骤608;
步骤605:构造相应的predicate;
步骤606:将predicate存放到list predicates中;
步骤607:跳转步骤604;
步骤608:匹配关键字where;
步骤609:当扫描完整个字符串,则跳转615;
步骤610:若匹配Att表达式成功,则生成AttrCondition对象,存放到attributionList队列中,跳转步骤609,否则跳转步骤611;
步骤611:若匹配Rel表达式成功,则生成RelCondition对象,存放到relationshipList队列中,跳转步骤609,否则跳转步骤612;
步骤612:,如果匹配运算符成功,则生成Operator对象,存放到operatorList队列中,跳转步骤609,否则跳转步骤613;
步骤613:返回出错状态;
步骤614:跳转步骤609;
步骤615:返回查询命令结构;
步骤43中,其中检索过程包括:
步骤701:由语法检查及检索准备工作即上述步骤42得到的查询命令结构,根据逻辑运算的优先级构造出匹配条件的二叉树;
步骤702:如果节点是&&、||或!则跳转步骤703,否则跳转步骤706;
步骤703:如果节点是&&,则匹配结果result为该节点的左子树返回值并上右子树返回值,跳转步骤707;
步骤704:如果节点是||,则匹配结果result为该节点的左子树返回值及右子树返回值取或运算,跳转步骤707;
步骤705:如果节点是!,则匹配结果result为该节点的右子树返回值取非运算,跳转步骤707;
步骤706:如果节点是原子条件表达式,则匹配结果result为该条件的真假,跳转步骤707;
步骤707:返回result值,若result为真,则匹配,反之,不匹配;
所述的基于代码查询进行源代码插桩的方法,其特征是插桩点即步骤12、步骤13、步骤14、步骤15和步骤45中,其实现在源文件编辑器标尺上增加相应的标记,该标记指定了插桩语句应该插入的字符位置、文件行数和插入内容。
所述的插桩点定义方式,其特征是所有插桩标志均随程序(工程)进行:插桩标志在程序(工程)关闭后自动进行保存,在下次打开工程时插桩标志依旧能够在源代码编辑器的标尺上进行还原。
本发明的有益效果是:本发明方法结合代码查询技术,有效的将代码查询得到的插桩位置以及上下文内容与插桩机制相结合在一起;明确定义的代码查询和插桩命令,得到参数化的插桩语句模板,使插桩代码可视化,自动插桩高效性等。
附图内容
图1为基于代码查询进行源代码插桩流程图
图2为C++代码信息收集过程
图3为CppIns插桩命令解析和正确性检查算法
图4为查询过程中条件匹配算法
具体实施方式
下面通过附图对本发明的技术方案做进一步的详细描述。
本发明主要的方法是利用代码查询技术来辅助进行源代码的插桩,其主要的过程如下所示:
1.获得C++源文件,被测程序、C++源程序;
2.从源文件中提取相应的代码信息
3.在代码信息中进行代码查询
4.按照插桩语句模板进行插桩语句定制,生成相应的插桩代码
5.将插桩代码和源文件合并
6.输出带有插桩语句的C++源代码
其中具体的过程如附图1所示,主要的步骤如下所示:
10:打开一个工程;
11:通过在CppIns编辑器中输入相应的插桩命令;
12:工具解析并执行插桩命令,得到所有符合条件的插桩点;
13:审查所有插桩点的定义:若发现带有错误的插桩点,则进入步骤14对其进行修改;没有发现带有错误的插桩点,则直接进入步骤15;
14:修改插桩的定义至正确;
15:将插桩代码与原源文件合并生成新源文件。
步骤11、12等中的CppIns插桩命令的语法如下:
S→find Id:T satisfying CS IS
T→variable|statement|function|class|expression|
operator
CS→{exist Id:T}{all Id:T}where CE
CE→CE&&CE|CE||CE|!CE|(CE)|Id.Att=’value’|Id
Rel Id
Att→vName|vDataType|vAttr|sType|fName|fReturnType|fParamsType|fAttr|cName|eContext|eType|oType
Rel→extend|use|change|in|call
IS→insert before Id IN|insert after Id IN|NULL
IN→‘STR’
STR→String STR/%Id.Att%STR|String|%Id.Att%
S是描述查询需求的查询命令。它的基本形式是:以关键字find开始,后跟一个id:T的声明格式,再接一个satisfying关键字,最后以条件子句CS结尾。它的含义是要查询满足查询条件CS的T类型的程序元素id。
T表示的是查询语言中对程序元素变量的声明格式。Id:T声明了一个类型为T,名为id的元素变量。Id作为它的声明元素的变量在之后的查询条件表达式CE中被使用。在条件表达式CE中出现的id必须先被声明,并且同一个变量名不能被重复声明。紧跟在关键字find之后声明的id就对应于要查询的程序元素。T可以是variable、statement、function、class、expression、operator中的其中之一,分别对应于变量、语句、方法、类、表达式和运算符。
条件语句CS描述的是目标元素需要满足的查询条件。它的语法规则在形式上符合带量词的一阶谓词的公式,具体含义是:存在T11类型的元素Id11、T12类型的元素Id12……,且对任一T21类型的元素Id21、T22类型的元素Id22……,使得条件表达式CE成立。其中,Id1i(i=1,2…)是紧跟关键字exist之后的元素的别名,并且它声明的类型为T1i;Id2j(j=1,2…)是紧跟关键字all之后的元素别名,并且它声明的类型为T2j。
条件表达式CE是一个布尔逻辑表达式,支持与(‘&&’)、或(‘||’)、非(‘!’)的逻辑运算符。用户还可以通过在条件表达式中添加括号’(‘和’)’,来改变运算符的运算先后次序。
可以看到,在有关CE的语法规则中有两个条件表达式Id.Att=’value’和Id RelId,它们是结构最简单的条件表达式,本文把这两个表达式称作原子表达式。任何一个条件表达式都是在一个或多个原子表达式的基础上添加与&&、或||、非!以及括号(和)等运算符拼接而成的。其中,Id.Att=’value’称为属性条件表达式,本文规定:如果元素Id的Att属性的属性值等于value,则表达式的值为True;否则表达式的值为False。Id1Rel Id2称为关系条件表达式,规定:如果元素Id1与Id2间存在关系Rel,则表达式的值为True,否则表达式的值为False。
非终结符IS表示了插桩命令。它以insert关键字开始,关键字before和after指明了插桩语句将会插入目标元素Id的之前还是之后。目标元素Id必须是在前面命令中已经定义的,例如在target元素部分或者predicate元素部分定义。目前在CppIns的实现中,只支持在statement元素的前后插入插桩语句。IN则是表示插桩语句的模板,模板语句定义在一对单引号中,其中可以包括一系列的参数,同样的模板中的Id也需要在命令的前半部分给出定义。
这样的扩展语法将会带来的优点之一是提供了与代码查询一致的用户接口,用户不需要掌握另外一种操作。从技术的角度上来说,用户可以使用代码查询中得到的信息构造插桩语句。利用这种方式的插桩过程有效的避免了插入无效代码的可能性,同时这种方式有效的利用的代码查询过程中的信息定制插桩代码,这样不同的插桩位置会产生相应又有所区别的代码片段。
本发明定义了针对不同的程序元素定义了一系列的属性(表格1),同时我们也定义了元素间的一系列关系(表格2)。
表格1程序元素的属性
表格2程序元素的关系
步骤11中,其中输入相应的CppIns插桩命令过程包括:
步骤30:打开CppIns命令编辑器;
步骤31:判断是否需要对整个C++工程或单个C++源文件进行插桩,如果是,则跳转到步骤32,如果不是,则跳转到步骤35;
步骤32:按照CppIns命令语法规则给出目标插桩点位置的CppIns命令描述;
步骤33:按照CppIns命令语法规则给出目标插桩点插桩语句的模板描述;
步骤34:将步骤32和步骤33得到的命令描述和模板描述的字符串输入到CppIns命令编辑器中;
步骤35:结束本次插桩定义;
步骤12中,其中运行相应的CppIns插桩命令、得到所有的插桩点定义过程包括:
步骤40:从CppIns命令编辑器中获得CppIns命令字符串,即查询和插桩命令描述和插桩代码模板描述的字符串;
步骤41:从已经打开工程中的C++源代码中生成相应的代码信息,这些代码信息包括变量、语句、函数、类、表达式和运算符信息;
步骤42:对步骤40中得到的CppIns查询命令字符串进行语法检测和预处理得到检索指令;
步骤43:按照检索指令在步骤41中得到的代码信息中进行目标元素检索,得到相应的目标元素集合和相应的辅助元素集合构成的元素属性值;
步骤44:将CppIns命令中插桩模板的参数替换成步骤43中的元素属性值,得到相应的插桩语句集合;
步骤45:从步骤43中得到插桩位置以及从步骤44中得到的插桩语句集合,生成相应的插桩点;
步骤41中,从源代码生成与CppIns命令字符串相应的代码信息的方式是:首先得到C++源代码相应的抽象语法树,在将语法树中的变量、语句、函数、类、表达式和运算符信息依次从语法树中抽取出来,形成表的数据结构,其中收集代码信息的过程参照图2所示。
步骤42如图3所示,其中检测和预处理即检查和检索准备工作的过程包括:
步骤601:匹配关键字find;
步骤602:匹配Target元素,并将其存放到对象target中;
步骤603:匹配关键satisfying;
步骤604:当匹配关键字exist成功或者匹配关键字all成功,则跳转步骤605,,否则跳转步骤608;
步骤605:构造相应的predicate;
步骤606:将predicate存放到list predicates中;
步骤607:跳转步骤604;
步骤608:匹配关键字where;
步骤609:当扫描完整个字符串,则跳转615;
步骤610:若匹配Att表达式成功,则生成AttrCondition对象,存放到attributionList队列中,跳转步骤609,否则跳转步骤611;
步骤611:若匹配Rel表达式成功,则生成RelCondition对象,存放到relationshipList队列中,跳转步骤609,否则跳转步骤612;
步骤612:,如果匹配运算符成功,则生成Operator对象,存放到operatorList队列中,跳转步骤609,否则跳转步骤613;
步骤613:返回出错状态;
步骤614:跳转步骤609;
步骤615:返回查询命令结构;
图4即步骤43,其中检索过程包括:
步骤701:由步骤42得到的查询命令结构,根据逻辑运算的优先级构造出匹配条件的二叉树;
步骤702:如果节点是&&、||或!则跳转步骤703,否则跳转步骤706;
步骤703:如果节点是&&,则匹配结果result为该节点的左子树返回值并上右子树返回值,跳转步骤707;
步骤704:如果节点是||,则匹配结果result为该节点的左子树返回值及右子树返回值取或运算,跳转步骤707;
步骤705:如果节点是!,则匹配结果result为该节点的右子树返回值取非运算,跳转步骤707;
步骤706:如果节点是原子条件表达式,则匹配结果result为该条件的真假,跳转步骤707;
步骤707:返回result值,若result为真,则匹配,反之,不匹配;
该所述的基于代码查询进行源代码插桩的方法,其特征是插桩点即步骤12、步骤13、步骤14、步骤15和步骤45中,其实现在源文件编辑器标尺上增加相应的标记,该标记指定了插桩语句应该插入的字符位置、文件行数和插入内容。
我们根据得到的匹配集合,对每条匹配记录生成一条插桩信息,该信息包括插桩点文件及其行号、插桩位置(在插桩点之前还是之后)、插桩内容。插桩内容的生成就是根据对插桩模板中的参数使用匹配记录中的信息进行填充替换所得到的。然后对于每条插桩信息,我们利用Eclipse平台所提供的标记API(add Marker)把插桩信息作为标记添加到被插桩的程序(工程)。
所述的插桩点定义方式,其特征是所有插桩标志均随程序(工程)进行:插桩标志在程序(工程)关闭后自动进行保存,在下次打开工程时插桩标志依旧能够在源代码编辑器的标尺上进行还原。
最后应当说明的是:以上步骤仅用于说明本发明的技术方案而非对其限制。尽管上述步骤对本发明进行了详细的说明,相关领域的技术人员应当理解,依然可以对本发明的具体技术进行修改或者对部分技术进行等同替换;而不脱离本发明技术方案的精神,其均应涵盖在本发明请求保护的技术方案范围内。
Claims (3)
1.基于源代码查询的半自动插桩方法,其特征是采用如下步骤:
步骤10:打开一个被测源程序;
步骤11:通过在CppIns编辑器中输入相应的插桩命令;
步骤12:CppIns的工具解析并执行插桩命令,得到所有符合条件的插桩点并生成对应的插桩代码;
步骤13:审查所有插桩点的定义:若发现带有错误的插桩点,则进入步骤14对其进行修改;没有发现带有错误的插桩点,则直接进入步骤15;
步骤14:修改插桩的定义至正确;
步骤15:将插桩代码与原源文件合并生成新源文件;
在步骤11中,其中输入相应的CppIns插桩命令过程包括:
步骤30:打开CppIns命令编辑器;
步骤31:判断是否需要对整个C++源文件工程或单个C++源文件进行插桩,如果是,则跳转到步骤32,如果不是,则跳转到步骤35;
步骤32:按照CppIns命令语法规则给出目标插桩点位置的CppIns命令描述;
步骤33:按照CppIns命令语法规则给出目标插桩点插桩语句的模板描述;
步骤34:将步骤32和步骤33得到的命令描述和模板描述的字符串输入到CppIns命令编辑器中;
步骤35:结束本次CppIns插桩命令;
在步骤12中,运行相应的CppIns插桩命令、得到所有的插桩点定义过程包括:
步骤40:从CppIns命令编辑器中获得CppIns命令字符串,即查询和插桩命令描述和插桩代码模板描述的字符串;
步骤41:从已经打开工程中的C++源代码中生成相应的代码信息,这些代码信息包括变量、语句、函数、类、表达式和运算符信息;
步骤42:对步骤40中得到的CppIns查询命令字符串进行语法检测和预处理得到检索指令;
步骤43:按照检索指令在步骤41中得到的代码信息中进行目标元素检索,得到相应的目标元素集合和相应的辅助元素集合构成的元素属性值;
步骤44:将CppIns命令中插桩模板的参数替换成步骤43中的元素属性值,得到相应的插桩语句集合;
步骤45:从步骤43中得到插桩位置以及从步骤44中得到的插桩语句集合,生成相应的插桩点;
在步骤41中,从源代码生成与CppIns命令字符串相应的代码信息的方式是:首先得到C++源代码或源文件相应的抽象语法树,在将语法树中的变量、语句、函数、类、表达式和运算符信息依次从语法树中抽取出来,形成表的数据结构;
步骤42中,其中检测和预处理即检查和检索准备工作的过程包括:
步骤601:匹配关键字find;
步骤602:匹配Target元素,并将其存放到对象target中;
步骤603:匹配关键satisfying;
步骤604:当匹配关键字exist成功或者匹配关键字all成功,则跳转步骤605,否则跳转步骤608;
步骤605:构造相应的predicate;
步骤606:将predicate存放到list predicates中;
步骤607:跳转步骤604;
步骤608:匹配关键字where;
步骤609:当扫描完整个字符串,则跳转615;
步骤610:若匹配Att表达式成功,则生成AttrCondition对象,存放到attributionList队列中,跳转步骤609,否则跳转步骤611;
步骤611:若匹配Rel表达式成功,则生成RelCondition对象,存放到relationshipList队列中,跳转步骤609,否则跳转步骤612;
步骤612:,如果匹配运算符成功,则生成Operator对象,存放到operatorList队列中,跳转步骤609,否则跳转步骤613;
步骤613:返回出错状态;
步骤614:跳转步骤609;
步骤615:返回查询命令结构;
步骤43中,其中检索过程包括:
步骤701:由语法检查及检索准备工作即上述步骤42得到的查询命令结构,根据逻辑运算的优先级构造出匹配条件的二叉树;
步骤702:如果节点是&&、||或!则跳转步骤703,否则跳转步骤706;
步骤703:如果节点是&&,则匹配结果result为该节点的左子树返回值并上右子树返回值,跳转步骤707;
步骤704:如果节点是||,则匹配结果result为该节点的左子树返回值及右子树返回值取或运算,跳转步骤707;
步骤705:如果节点是!,则匹配结果result为该节点的右子树返回值取非运算,跳转步骤707;
步骤706:如果节点是原子条件表达式,则匹配结果result为该条件的真假,跳转步骤707;
步骤707:返回result值,若result为真,则匹配,反之,不匹配。
2.根据权利要求1所述的基于代码查询进行源代码插桩的方法,其特征是插桩点即步骤12、步骤13、步骤14、步骤15和步骤45中,其实现在源文件编辑器标尺上增加相应的标记,该标记指定了插桩语句应该插入的字符位置、文件行数和插入内容。
3.根据权利要求2所述的基于源代码查询进行源代码插桩的方法,其特征是所述的插桩点定义方式,所有插桩标志均随源程序进行:插桩标志在源程序关闭后自动进行保存,在下次打源程序时插桩标志依旧能够在源代码编辑器的标尺上进行还原。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2012105320191A CN103049504A (zh) | 2012-12-11 | 2012-12-11 | 基于源代码查询的半自动插桩方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2012105320191A CN103049504A (zh) | 2012-12-11 | 2012-12-11 | 基于源代码查询的半自动插桩方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103049504A true CN103049504A (zh) | 2013-04-17 |
Family
ID=48062145
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2012105320191A Pending CN103049504A (zh) | 2012-12-11 | 2012-12-11 | 基于源代码查询的半自动插桩方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103049504A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104142819A (zh) * | 2013-07-10 | 2014-11-12 | 腾讯科技(深圳)有限公司 | 一种文件处理方法及装置 |
CN104598274A (zh) * | 2015-01-13 | 2015-05-06 | 北京京东尚科信息技术有限公司 | 一种自动插桩编译安装方法及系统 |
CN106648946A (zh) * | 2016-10-09 | 2017-05-10 | 武汉斗鱼网络科技有限公司 | 基于插桩方式快速屏蔽客户端故障的方法及系统 |
CN106874058A (zh) * | 2016-12-29 | 2017-06-20 | 中国航天系统科学与工程研究院 | 一种基于源代码的程序自动插桩方法 |
CN107679400A (zh) * | 2017-08-31 | 2018-02-09 | 西安电子科技大学 | 基于源代码插桩的社交网络安全运行时验证方法及系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6044197A (en) * | 1994-03-14 | 2000-03-28 | Grass Valley (U.S.) Inc. | Recording of time code in a database |
CN102231109A (zh) * | 2011-07-15 | 2011-11-02 | 南京大学 | 无痕可管理的源代码自动插桩方法 |
CN102298552A (zh) * | 2011-09-19 | 2011-12-28 | 南京大学 | 基于代码查询进行源代码插桩的方法 |
-
2012
- 2012-12-11 CN CN2012105320191A patent/CN103049504A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6044197A (en) * | 1994-03-14 | 2000-03-28 | Grass Valley (U.S.) Inc. | Recording of time code in a database |
CN102231109A (zh) * | 2011-07-15 | 2011-11-02 | 南京大学 | 无痕可管理的源代码自动插桩方法 |
CN102298552A (zh) * | 2011-09-19 | 2011-12-28 | 南京大学 | 基于代码查询进行源代码插桩的方法 |
Non-Patent Citations (1)
Title |
---|
张静芳等: "信息检索中改进二叉树优化检索算法", 《情报学报》 * |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104142819A (zh) * | 2013-07-10 | 2014-11-12 | 腾讯科技(深圳)有限公司 | 一种文件处理方法及装置 |
CN104142819B (zh) * | 2013-07-10 | 2016-08-24 | 腾讯科技(深圳)有限公司 | 一种文件处理方法及装置 |
CN104598274A (zh) * | 2015-01-13 | 2015-05-06 | 北京京东尚科信息技术有限公司 | 一种自动插桩编译安装方法及系统 |
CN104598274B (zh) * | 2015-01-13 | 2017-07-18 | 北京京东尚科信息技术有限公司 | 一种自动插桩编译安装方法及系统 |
CN106648946A (zh) * | 2016-10-09 | 2017-05-10 | 武汉斗鱼网络科技有限公司 | 基于插桩方式快速屏蔽客户端故障的方法及系统 |
CN106648946B (zh) * | 2016-10-09 | 2019-06-21 | 武汉斗鱼网络科技有限公司 | 基于插桩方式快速屏蔽客户端故障的方法及系统 |
CN106874058A (zh) * | 2016-12-29 | 2017-06-20 | 中国航天系统科学与工程研究院 | 一种基于源代码的程序自动插桩方法 |
CN107679400A (zh) * | 2017-08-31 | 2018-02-09 | 西安电子科技大学 | 基于源代码插桩的社交网络安全运行时验证方法及系统 |
CN107679400B (zh) * | 2017-08-31 | 2020-09-25 | 西安电子科技大学 | 基于源代码插桩的社交网络安全运行时验证方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107704265B (zh) | 一种面向业务流可配置的规则生成方法 | |
CN106919434B (zh) | 一种代码生成方法及装置 | |
JP5775829B2 (ja) | ソフトウェアの構造可視化プログラムおよびシステム | |
US20070266378A1 (en) | Source code generation method, apparatus, and program | |
CN108762743B (zh) | 一种数据表操作代码生成方法及装置 | |
CN104503816A (zh) | 一种硬件语言vhdl到msvl的自动转换系统 | |
US11301643B2 (en) | String extraction and translation service | |
WO2009087996A1 (ja) | 情報抽出装置及び情報抽出システム | |
US20080034288A1 (en) | Text-Driven Macros Integrated with a Help System of a Computer Program | |
CN107908559B (zh) | 一种测试案例设计方法及装置 | |
CN103049504A (zh) | 基于源代码查询的半自动插桩方法 | |
CN102298552A (zh) | 基于代码查询进行源代码插桩的方法 | |
CN107153606A (zh) | 一种程序分析过程可视化方法及系统 | |
CN110162297A (zh) | 一种源代码段自然语言描述自动生成方法及系统 | |
CN108563561B (zh) | 一种程序隐性约束提取方法及系统 | |
CN115878003A (zh) | 一种基于Transformer的RPA网页操作自动化方法及系统 | |
CN112199115A (zh) | 基于特征相似度匹配的跨Java字节码和源代码行关联方法 | |
JP6183636B2 (ja) | ソースコード検査装置 | |
CN101201750B (zh) | 利用语法词法分析工具为编解码提供数据的方法 | |
CN113419721A (zh) | 基于web的表达式编辑方法、装置、设备和存储介质 | |
JP5342407B2 (ja) | プログラム解析方法、プログラム解析プログラムおよびプログラム解析装置 | |
JP4996262B2 (ja) | プログラム部品化支援装置 | |
CN110659200A (zh) | 航空机载软件的源码和目标码对比分析方法及系统 | |
De Vos et al. | Epispin: An eclipse plug-in for promela/spin using spoofax | |
US20220222065A1 (en) | System and method of computer-assisted computer programming |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20130417 |