一种函数调用链获取方法、装置及存储介质制造方法及图纸

技术编号:26890348 阅读:24 留言:0更新日期:2020-12-29 16:06
本申请涉及一种函数调用链获取方法、装置及存储介质,所述方法包括:获取目标文件,其中所述目标文件中包括多个子文件;调用预设的函数匹配工具,对每个子文件进行分析,得到每个子文件中的函数调用关系;将每个子文件中的所述函数调用关系分别存储到数据库中;当接收到函数调用链查询请求时,所述查询请求中包括待查询函数的函数名称,根据所述函数名称在所述数据库中查找所述待查询函数在所述目标文件中的函数调用链。本申请可实现根据函数名称查找到该函数的函数调用链,业务接入简单且对机器性能要求低。

【技术实现步骤摘要】
一种函数调用链获取方法、装置及存储介质
本申请涉及计算机
,尤其涉及一种函数调用链获取方法、装置及存储介质。
技术介绍
对于采用编程语言编写的项目文件,其框架都可以反应为一棵函数调用树。在分析项目之前,通过该函数调用树就可以了解项目的整体框架;在运行项目之后,能够跟踪到运行过程中的函数调用,有利于分析某些测试条件下项目的执行流程,由此可以看出,通过获取函数调用关系,能够为项目分析以及项目测试提供极大的便利。现有技术中提出了一种通过ClangPlugin获取函数调用关系的技术方案,Clang是一个C语言、C++、Objective-C语言的轻量级编译器,ClangPlugin方案通过编写Clang插件,更改xcode工程配置,替换xcode的Clang编译器,在工程编译阶段分析抽象语法树AST拿到函数调用关系,获取函数调用链。该技术方案由于存在替换编译器以及修改配置的操作,编译稳定性差,并且业务接入复杂,对机器的性能要求高。
技术实现思路
本申请所要解决的技术问题在于,提供一种函数调用链获取方法、装置及存储介质,能够通过分析得出目标文件中各子文件中的函数调用关系并存储到数据库中,从而可实现根据函数名称查找到该函数的函数调用链。为了解决上述技术问题,本申请提供了一种函数调用链获取方法,所述方法包括:获取目标文件,其中所述目标文件中包括多个子文件;调用预设的函数匹配工具,对每个子文件进行分析,得到每个子文件中的函数调用关系;将每个子文件中的所述函数调用关系分别存储到数据库中;当接收到函数调用链查询请求时,所述查询请求中包括待查询函数的函数名称,根据所述函数名称在所述数据库中查找所述待查询函数在所述目标文件中的函数调用链。本申请实施例还提供了一种函数调用链获取装置,所述装置包括:文件获取模块,用于获取目标文件,其中所述目标文件中包括多个子文件;文件分析模块,用于调用预设的函数匹配工具,对每个子文件进行分析,得到每个子文件中的函数调用关系;调用关系存储模块,用于将每个子文件中的所述函数调用关系分别存储到数据库中;查找模块,用于当接收到函数调用链查询请求时,所述查询请求中包括待查询函数的函数名称,根据所述函数名称在所述数据库中查找所述待查询函数在所述目标文件中的函数调用链。本申请实施例还提供了一种计算机存储介质,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、至少一段程序、代码集或指令集由处理器加载并执行如上述的函数调用链获取方法。本申请实施例还提供了一种设备,所述设备包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现如上述的函数调用链获取方法。本申请通过调用预设的函数匹配工具,对获取的目标文件中的多个子文件分别进行分析,得到每个子文件的函数调用关系;将每个子文件中的函数调用关系分别存储到数据库中;当接收到函数调用链查询请求时,根据但查询函数的函数名称在所述数据库中查找待查询函数在所述目标文件中的函数调用链。本申请能够实现对于目标文件中的任一函数,根据该函数的函数名,就可以在数据库中查找到该函数在目标文件中的函数调用链;本申请在进行函数调用链获取时,无需编译、分析耗时短、业务接入简单且对机器性能要求低。附图说明图1是本申请实施例提供的应用场景示意图;图2是本申请实施例提供的一种函数调用链获取方法流程图;图3是本申请实施例提供的一种文件分析方法流程图;图4是本申请实施例提供的一种函数调用关系存储方法流程图;图5是本申请实施例提供的一种函数调用链查找方法流程图;图6是本申请实施例提供的一种函数匹配工具的获取方法流程图;图7是本申请实施例提供的一种函数调用组合的确定方法流程图;图8是本申请实施例提供的一种函数匹配工具生成方法流程图;图9是本申请实施例提供的第一示例示意图;图10是本申请实施例提供的第二示例示意图;图11是本申请实施例提供的函数调用链获取装置示意图;图12是本申请实施例提供的函数匹配工具生成模块示意图;图13是本申请实施例提供的第一分析模块示意图;图14是本申请实施例提供的第一生成模块示意图;图15是本申请实施例提供的文件分析模块示意图;图16是本申请实施例提供的调用关系存储模块示意图;图17是本申请实施例提供的查找模块示意图;图18是本申请实施例提供的一种设备结构示意图。具体实施方式为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述。显然,所描述的实施例仅仅是本申请的一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。首先对本申请实施例中涉及到的相关名词做以下解释:Clang:Clang(发音为//类似英文单字)是一个C、C++、Objective-C和Objective-C++编程语言的编译器前端。Objective-C:是一种通用、高级、面向对象的编程语言。AST:抽象语法树,是源代码语法结构的一种抽象表示。ASTMatcher:Clang提供的一个工具,允许用户编写一个程序来匹配AST节点并能通过访问节点的C++接口来获取该AST节点的属性、源位置等任何信息,其主要由宏与模板驱动,用法和函数式编程类似,其可实现简单精准高效的匹配。clang-query:clang提供的一个工具,快速验证ASTMatcher的正确性。请参见图1,其示出了本申请实施例提供的应用场景示意图,该场景可以包括:用户端110、服务器120以及数据库130,其中,所述用户端110与服务器120之间可进行通信,所述服务器120与所述数据库130之间可进行通信。其中,所述用户端110可向所述服务器120发送相关工程项目文件,所述服务器120接收到文件之后,对该文件进行分析,得到其中的函数调用关系,并将各项函数调用关系存储到数据库130中。当用户端110向服务器120发出函数调用链查询请求时,服务器根据待查询函数的函数名在数据库130中查到该函数的函数调用链。具体地,用户端110可以包括智能手机、台式电脑、平板电脑、笔记本电脑、数字助理等类型的实体设备,也可以包括运行于实体设备中的软体。本申请实施例中用户端110上运行的操作系统可以包括但不限于安卓系统、IOS系统、linux、windows等。服务器120与所述用户端110以及数据库130可以通过有线或者无线建立通信连接,该服务器120可以包括一个独立运行的服务器,或者分布式服务器,或者由多个服务器组成的服务器集群,其中服务器可以是云端服务器。请参见图2本文档来自技高网...

【技术保护点】
1.一种函数调用链获取方法,其特征在于,包括:/n获取目标文件,其中所述目标文件中包括多个子文件;/n调用预设的函数匹配工具,对每个子文件进行分析,得到每个子文件中的函数调用关系;/n将每个子文件中的所述函数调用关系分别存储到数据库中;/n当接收到函数调用链查询请求时,所述查询请求中包括待查询函数的函数名称,根据所述函数名称在所述数据库中查找所述待查询函数在所述目标文件中的函数调用链。/n

【技术特征摘要】
1.一种函数调用链获取方法,其特征在于,包括:
获取目标文件,其中所述目标文件中包括多个子文件;
调用预设的函数匹配工具,对每个子文件进行分析,得到每个子文件中的函数调用关系;
将每个子文件中的所述函数调用关系分别存储到数据库中;
当接收到函数调用链查询请求时,所述查询请求中包括待查询函数的函数名称,根据所述函数名称在所述数据库中查找所述待查询函数在所述目标文件中的函数调用链。


2.根据权利要求1所述的一种函数调用链获取方法,其特征在于,所述函数调用链获取方法还包括所述函数匹配工具的生成方法,所述函数匹配工具的生成方法包括:
获取模板文件;
对所述模板文件进行分析,得到所述模板文件中的函数调用组合;
根据所述函数调用组合生成所述函数匹配工具。


3.根据权利要求2所述的一种函数调用链获取方法,其特征在于,所述对所述模板文件进行分析,得到所述模板文件中的函数调用组合包括:
获取所述模板文件的语法树;
从所述语法树中确定被调用函数节点;
从所述语法树中确定所述被调用函数节点上一层的函数定义节点;
从所述语法树中确定所述函数定义节点的类声明节点;
组合所述被调用函数节点、所述函数定义节点以及所述类声明节点,得到所述函数调用组合。


4.根据权利要求2所述的一种函数调用链获取方法,其特征在于,所述根据所述函数调用组合生成函数匹配工具包括:
根据所述函数调用组合创建匹配器;
基于所述匹配器以及预设规则,编写匹配函数;
对所述匹配函数进行编译,生成所述函数匹配工具。


5.根据权利要求1所述的一种函数调用链获取方法,其特征在于,所述调用预设的函数匹配工具,对每个子文件进行分析,得到每个子文件中的函数调用关系包括:
对于每个子文件,调用所述函数匹配工具,匹配出所述子文件中的一项或多项函数调用关系;
将每项函数调用关系分别输出到与所述子文件对应的函数匹配文件中,其中所述匹配文件中的一条记录对应一项函数调用关系,每项函数调用关系包括:目标函数的类名、目标函数的函数名以及被所述目标函数调用的被调用函数名。


...

【专利技术属性】
技术研发人员:宾涛刘芳
申请(专利权)人:腾讯科技深圳有限公司
类型:发明
国别省市:广东;44

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1