[发明专利]基于源代码查询的半自动插桩方法无效
申请号: | 201210532019.1 | 申请日: | 2012-12-11 |
公开(公告)号: | CN103049504A | 公开(公告)日: | 2013-04-17 |
发明(设计)人: | 张天;何英;李宣东 | 申请(专利权)人: | 南京大学 |
主分类号: | G06F17/30 | 分类号: | G06F17/30 |
代理公司: | 南京瑞弘专利商标事务所(普通合伙) 32249 | 代理人: | 陈建和 |
地址: | 210093 江*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | 一种基于源代码查询的代码插桩方法,包括步骤:10:打开一个工程;11:通过在CppIns编辑器中输入相应的插桩命令;12:工具解析并执行插桩命令,得到所有符合条件的插桩点;13:审查所有插桩点的定义:若发现带有错误的插桩点,则进入步骤14对其进行修改;没有发现带有错误的插桩点,则直接进入步骤15;14:修改插桩的定义至正确;15:将插桩代码与原源文件合并生成新源文件。该方法主要特点为明确定义的代码查询和插桩命令、参数化的插桩语句模板、插桩代码可视化、插桩过程无痕化、插桩点自动化定位、自动插桩高效性等。 | ||
搜索关键词: | 基于 源代码 查询 半自动 方法 | ||
【主权项】:
基于源代码查询的半自动插桩方法,其特征是采用如下步骤:步骤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为真,则匹配,反之,不匹配。
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南京大学,未经南京大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/patent/201210532019.1/,转载请声明来源钻瓜专利网。
- 上一篇:一种用于清除预榨毛油中粗粒油渣分离的澄油箱
- 下一篇:一种用于注液的脱泡系统