[发明专利]基于源代码查询的半自动插桩方法无效

专利信息
申请号: 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/,转载请声明来源钻瓜专利网。

×

专利文献下载

说明:

1、专利原文基于中国国家知识产权局专利说明书;

2、支持发明专利 、实用新型专利、外观设计专利(升级中);

3、专利数据每周两次同步更新,支持Adobe PDF格式;

4、内容包括专利技术的结构示意图流程工艺图技术构造图

5、已全新升级为极速版,下载速度显著提升!欢迎使用!

请您登陆后,进行下载,点击【登陆】 【注册】

关于我们 寻求报道 投稿须知 广告合作 版权声明 网站地图 友情链接 企业标识 联系我们

钻瓜专利网在线咨询

周一至周五 9:00-18:00

咨询在线客服咨询在线客服
tel code back_top