一种函数调用树的生成方法及装置制造方法及图纸

技术编号:21453587 阅读:17 留言:0更新日期:2019-06-26 04:40
本发明专利技术提供了一种函数调用树的生成方法及装置,筛选区分目标程序中的函数声明文件、函数实现文件、函数调用文件;筛选区分目标程序中的宏定义,去除宏定义中的常数定义和无关编译指令,并建立重命名函数表;根据函数调用文件及重命名函数表,确定每个调用函数的函数名及函数名相对应的位置;根据函数声明文件、函数实现文件、重命名函数表对目标程序进行递归搜索,获取递归搜索结果;根据递归搜索结果及函数名相对应的位置生成函数调用树。本发明专利技术的方法通过对整个程序进行递归搜索并建立重命名函数表确定函数名及位置从而生成函数调用树的方式,不仅实现了生成整个程序的函数调用树,而且保证了调用函数之间的位置顺序和重命名函数的完整性。

【技术实现步骤摘要】
一种函数调用树的生成方法及装置
本专利技术涉及计算机

,特别涉及一种函数调用树的生成方法及装置。
技术介绍
在软件开发过程中,当函数代码变更后需要评估出函数代码变更的影响范围,以评估出函数代码变更是否会引起兼容性的问题,从而可以更准确的指导测试范围。现有的调用树生成软件是通过树状图在关系窗口中体现出调用关系和被调用关系,在用户选中某个函数时,软件通过搜索该函数代码中的函数将该函数的调用函数输出到调用关系树中和被调用关系树中。但是现有的函数调用树生成软件只能生成某个函数的调用关系和被调用关系,并不能生成整个程序的函数调用关系和被调用关系和详细的调用位置顺序。经常会出现遗漏宏定义函数和宏定义重命名函数的情况,而且在分析时只能保证函数覆盖率,不能保证调用覆盖率。
技术实现思路
有鉴于此,本专利技术旨在提出一种函数调用树的生成方法,以解决现有函数调用树生成软件只能生成某个函数的调用和被调用关系,不能生成整个程序的函数调用关系和被调用关系和详细的调用位置顺序。经常会出现遗漏宏定义函数和宏定义重命名函数的情况,而且在分析时只能保证函数覆盖率,不能保证调用覆盖率的问题。为达到上述目的,本专利技术的技术方案是这样实现的:一种函数调用树的生成方法,所述方法包括:筛选区分所述目标程序中的函数声明文件、函数实现文件、函数调用文件;筛选区分所述目标程序中的宏定义,去除所述宏定义中的常数定义和无关编译指令,并建立重命名函数表;根据所述函数调用文件及所述重命名函数表,确定每个调用函数的函数名及所述函数名相对应的位置;根据所述函数声明文件、所述函数实现文件、所述重命名函数表对所述目标程序进行递归搜索,获取递归搜索结果;根据所述递归搜索结果及所述函数名相对应的位置生成函数调用树。进一步的,所述筛选区分所述目标程序中的函数声明文件、函数实现文件、函数调用文件的步骤之前,还包括:递归搜索所述目标程序所有函数之间的引用关系,并建立引用关系表。进一步的,所述根据所述函数声明文件、所述函数实现文件、所述重命名函数表对所述目标程序进行递归搜索,获取递归搜索结果,包括:根据所述函数声明文件、所述引用关系表、所述重命名函数表,从所述目标程序的函数调用子树的根节点开始递归搜索,根据所述引用关系表查询下一步的被调用函数名,直到所述引用关系表中未找到所述被调用函数名时停止并获取递归搜索结果。进一步的,所述根据所述函数调用文件及所述重命名函数表,确定每个调用函数的函数名及所述函数名相对应的位置的步骤之后,还包括:根据所述函数名对所述调用函数进行分类,并将每一类的所述调用函建立一条函数调用子树,同一类的其余所述调用函数通过链表连接。进一步的,所述根据所述函数声明文件、所述函数实现文件、所述重命名函数表对所述目标程序进行递归搜索,获取递归搜索结果,还包括:通过搜索记录,省略对已搜索过的所述被调用函数进行递归搜索。相对于现有技术,本专利技术所述的一种函数调用树的生成方法具有以下优势:本专利技术提供了一种函数调用树的生成方法,筛选区分目标程序中的函数声明文件、函数实现文件、函数调用文件;筛选区分目标程序中的宏定义,去除宏定义中的常数定义和无关编译指令,并建立重命名函数表;根据函数调用文件及重命名函数表,确定每个调用函数的函数名及函数名相对应的位置;根据函数声明文件、函数实现文件、重命名函数表对目标程序进行递归搜索,获取递归搜索结果;根据递归搜索结果及函数名相对应的位置生成函数调用树。本专利技术的方法通过对整个程序进行递归搜索并建立重命名函数表确定函数名及位置从而生成函数调用树的方式,不仅实现了生成整个程序的函数调用树,而且保证了调用函数之间的位置顺序和重命名函数的完整性。本专利技术的另一目的在于提出一种函数调用树的生成装置,以以解决现有函数调用树生成软件只能生成某个函数的调用和被调用关系,不能生成整个程序的函数调用关系和被调用关系和详细的调用位置顺序。经常会出现遗漏宏定义函数和宏定义重命名函数的情况,而且在分析时只能保证函数覆盖率,不能保证调用覆盖率的问题。为达到上述目的,本专利技术的技术方案是这样实现的:一种函数调用树的生成装置,所述装置包括:文件筛选模块,用于筛选区分所述目标程序中的函数声明文件、函数实现文件、函数调用文件;宏定义筛选模块,用于筛选区分所述目标程序中的宏定义,去除所述宏定义中的常数定义和无关编译指令,并建立重命名函数表;确认模块,用于根据所述函数调用文件及所述重命名函数表,确定每个调用函数的函数名及所述函数名相对应的位置;递归搜索模块,用于根据所述函数声明文件、所述函数实现文件、所述重命名函数表对所述目标程序进行递归搜索,获取递归搜索结果;函数调用树生成模块,用于根据所述递归搜索结果及所述函数名相对应的位置生成函数调用树。进一步的,所述文件筛选模块之前,还包括:引用关系模块,用于递归搜索所述目标程序所有函数之间的引用关系,并建立引用关系表。进一步的,所述递归搜索模块,包括:递归搜索子模块,用于根据所述函数声明文件、所述引用关系表、所述重命名函数表,从所述目标程序的函数调用子树的根节点开始递归搜索,根据所述引用关系表查询下一步的被调用函数名,直到所述引用关系表中未找到所述被调用函数名时停止并获取递归搜索结果。进一步的,所述确认模块之后,还包括:函数调用子树模块,用于根据所述函数名对所述调用函数进行分类,并将每一类的所述调用函建立一条函数调用子树,同一类的其余所述调用函数通过链表连接。进一步的,所述递归搜索模块,还用于通过搜索记录,省略对已搜索过的所述被调用函数进行递归搜索。相对于现有技术,本专利技术所述的一种函数调用树的生成装置具有以下优势:本专利技术提供了一种函数调用树的生成方法,筛选区分目标程序中的函数声明文件、函数实现文件、函数调用文件;筛选区分目标程序中的宏定义,去除宏定义中的常数定义和无关编译指令,并建立重命名函数表;根据函数调用文件及重命名函数表,确定每个调用函数的函数名及函数名相对应的位置;根据函数声明文件、函数实现文件、重命名函数表对目标程序进行递归搜索,获取递归搜索结果;根据递归搜索结果及函数名相对应的位置生成函数调用树。本专利技术的方法通过对整个程序进行递归搜索并建立重命名函数表确定函数名及位置从而生成函数调用树的方式,不仅实现了生成整个程序的函数调用树,而且保证了调用函数之间的位置顺序和重命名函数的完整性。所述一种函数调用树的生成装置与上述一种函数调用树的生成方法相对于现有技术所具有的优势相同,在此不再赘述。附图说明构成本专利技术的一部分的附图用来提供对本专利技术的进一步理解,本专利技术的示意性实施例及其说明用于解释本专利技术,并不构成对本专利技术的不当限定。在附图中:图1为本专利技术实施例所述的一种函数调用树的生成方法的步骤流程图;图2为本专利技术实施例所述的另一种函数调用树的生成方法的步骤流程图;图3为本专利技术实施例所述的一种函数调用树的生成装置的结构框图。具体实施方式需要说明的是,在不冲突的情况下,本专利技术中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本专利技术。参照图1是本专利技术实施例提供的一种函数调用树的生成方法的步骤流程图,该方法可以包括:步骤101,筛选区分所述目标程序中的函数声明文件、函数实现文件、函数调用文件。步骤102,筛选区分所述本文档来自技高网...

【技术保护点】
1.一种函数调用树的生成方法,其特征在于,所述方法包括:筛选区分所述目标程序中的函数声明文件、函数实现文件、函数调用文件;筛选区分所述目标程序中的宏定义,去除所述宏定义中的常数定义和无关编译指令,并建立重命名函数表;根据所述函数调用文件及所述重命名函数表,确定每个调用函数的函数名及所述函数名相对应的位置;根据所述函数声明文件、所述函数实现文件、所述重命名函数表对所述目标程序进行递归搜索,获取递归搜索结果;根据所述递归搜索结果及所述函数名相对应的位置生成函数调用树。

【技术特征摘要】
1.一种函数调用树的生成方法,其特征在于,所述方法包括:筛选区分所述目标程序中的函数声明文件、函数实现文件、函数调用文件;筛选区分所述目标程序中的宏定义,去除所述宏定义中的常数定义和无关编译指令,并建立重命名函数表;根据所述函数调用文件及所述重命名函数表,确定每个调用函数的函数名及所述函数名相对应的位置;根据所述函数声明文件、所述函数实现文件、所述重命名函数表对所述目标程序进行递归搜索,获取递归搜索结果;根据所述递归搜索结果及所述函数名相对应的位置生成函数调用树。2.根据权利要求1所述的方法,其特征在于,所述筛选区分所述目标程序中的函数声明文件、函数实现文件、函数调用文件的步骤之前,还包括:递归搜索所述目标程序所有函数之间的引用关系,并建立引用关系表。3.根据权利要求2所述的方法,其特征在于,所述根据所述函数声明文件、所述函数实现文件、所述重命名函数表对所述目标程序进行递归搜索,获取递归搜索结果,包括:根据所述函数声明文件、所述引用关系表、所述重命名函数表,从所述目标程序的函数调用子树的根节点开始递归搜索,根据所述引用关系表查询下一步的被调用函数名,直到所述引用关系表中未找到所述被调用函数名时停止并获取递归搜索结果。4.根据权利要求1所述的方法,其特征在于,所述根据所述函数调用文件及所述重命名函数表,确定每个调用函数的函数名及所述函数名相对应的位置的步骤之后,还包括:根据所述函数名对所述调用函数进行分类,并将每一类的所述调用函建立一条函数调用子树,同一类的其余所述调用函数通过链表连接。5.根据权利要求1所述的方法,其特征在于,所述根据所述函数声明文件、所述函数实现文件、所述重命名函数表对所述目标程序进行递归搜索,...

【专利技术属性】
技术研发人员:杨进
申请(专利权)人:蜂巢能源科技有限公司
类型:发明
国别省市:江苏,32

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

1