[发明专利]一种C-sharp中函数复制方法及装置有效
申请号: | 201710841734.6 | 申请日: | 2017-09-18 |
公开(公告)号: | CN107632934B | 公开(公告)日: | 2021-02-02 |
发明(设计)人: | 刘吉林;张文明;陈少杰 | 申请(专利权)人: | 武汉斗鱼网络科技有限公司 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 北京路浩知识产权代理有限公司 11002 | 代理人: | 王莹;吴欢燕 |
地址: | 430000 湖北省武汉市东湖开*** | 国省代码: | 湖北;42 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 sharp 函数 复制 方法 装置 | ||
本发明提供一种C‑sharp中函数复制方法及装置,所述方法包括:S1,获取C‑sharp程序的程序集,若所述程序集为目标函数所在的程序集,则根据所述程序集获取所述目标函数的元数据;S2,使用所述目标函数的元数据,创建复制函数;S3,获取所述目标函数的函数体,将所述函数体设置到创建的所述复制函数中。本发明一方面,实现复制的目标函数在供其他代码调用时不影响目标函数的原代码;另一方面,本实施例中所述复制函数在创建完成后下次可以直接调用。
技术领域
本发明涉及软件测试领域,更具体地,涉及一种C-sharp中函数复制方法及装置。
背景技术
在.net框架中,可能会遇到需要在运行时创建复制函数的情况,如复制目标函数供探针程序调用,而不影响其他程序。探针根据复制的目标程序探测网站目录、CPU的使用情况、服务器的操作系统以及组件支持情况等。
目前,常规的做法为直接调用原函数,但只能在部分情况下使用。当直接调用原函数,不对原函数进行更改时,可以使用常规做法;当需要对原函数进行更改时,如对原函数中的变量进行更改时,会更改原函数以前被使用的情况,将原函数以前的功能修改出故障,破坏了原函数的封装性。
发明内容
为克服上述直接调用原函数时,在对原函数进行更改的情况下,破坏原函数封装性的问题或者至少部分地解决上述问题,本发明提供了一种C-sharp中函数复制方法及装置。
根据本发明的第一方面,提供一种C-sharp中函数复制方法,包括:
S1,获取C-sharp程序的程序集,若所述程序集为目标函数所在的程序集,则根据所述程序集获取所述目标函数的元数据;
S2,使用所述目标函数的元数据,创建复制函数;
S3,获取所述目标函数的函数体,将所述函数体设置到创建的所述复制函数中。
具体地,所述步骤S1具体包括:
创建CLR Profiler实例,在所述CLR Profiler实例中加载所述C-sharp程序的程序集;
在所述ICorProfilerCallback::ModuleLoadStarted方法回调时,使用ICorProfilerInfo::GetModuleInfo方法获取所述程序集的名称;
若所述程序集的名称为所述目标函数所在程序集的名称,则根据所述程序集获取所述目标函数的元数据。
具体地,所述步骤S1中获取所述目标函数的元数据的步骤具体包括:
使用ICorProfilerInfo::GetModuleMetaData方法,获取所述程序集的IMetaDataImport接口实例;
在所述IMetaDataImport接口实例中使用IMetaDataImport::GetMethodProps方法获取所述目标函数的元数据。
具体地,所述步骤S2具体包括:
在所述ICorProfilerCallback::ModuleLoadStarted方法的回调中,将所述目标函数的元数据作为所述复制函数的函数声明创建所述复制函数。
具体地,所述步骤S3具体包括:
在ICorProfilerCallback::JITCompilationStarted方法回调时,使用ICorProfilerInfo::GetFunctionInfo方法获取所述目标函数的函数体;
将创建的所述复制函数传入ICorProfilerCallback::JITCompilationStarted方法;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于武汉斗鱼网络科技有限公司,未经武汉斗鱼网络科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710841734.6/2.html,转载请声明来源钻瓜专利网。