【技术实现步骤摘要】
函数调用树生成方法、系统、计算机设备及可读存储介质
本专利技术涉及软件领域,具体涉及一种函数调用树生成方法、系统、计算机设备及可读存储介质。
技术介绍
Java语言被越来越广泛地应用于构建各种复杂的软件系统,每个系统可能有很多类,每个类有很多函数,生成的软件系统中函数的调用树可以在很多场景下被用到。比如,分析系统中某个私有函数的变更可能会影响到哪些对外提供的接口的行为。现有的技术方案是通过静态扫描分析代码编译后生成的字节码文件,解析其中的函数调用指令,得出函数间的调用关系,最终组装出调用树的。但是现有技术所采用的静态分析的方式有诸多不足:一方面,由于Java的多态特性,某个接口可能有不同的实现类,而实际执行时具体使用哪一个实现类可能是在运行时动态决定的;另一方面,由于Java的动态加载能力和复杂的扩展能力,许多类之间的依赖是通过配置文件解析得到的,通过静态分析无法分析出其中的依赖关系,或者因为涉及到复杂的第三方框架使得分析过于复杂而近乎不可能实现;再者,通过静态分析得到的树可能因为包含各种框架和底层代码的函数 ...
【技术保护点】
1.一种函数调用树生成方法,其特征在于,所述函数调用树生成方法包括如下步骤:/n使用字节码转换器在函数的前后分别织入增强代码,以进行字节码增强;/n运行覆盖测试,在运行期间使用堆栈数据结构收集软件系统执行过程中的实际调用函数,以形成调用树。/n
【技术特征摘要】
1.一种函数调用树生成方法,其特征在于,所述函数调用树生成方法包括如下步骤:
使用字节码转换器在函数的前后分别织入增强代码,以进行字节码增强;
运行覆盖测试,在运行期间使用堆栈数据结构收集软件系统执行过程中的实际调用函数,以形成调用树。
2.根据权利要求1所述的函数调用树生成方法,其特征在于,在启动脚本中使用Java提供的Agent机制加载所述字节码转换器,所述字节码转换器中使用ASM在函数前后进行字节码增强。
3.根据权利要求1所述的函数调用树生成方法,其特征在于,类加载过程中调用所述字节码转换器在函数前织入增强代码作为前置增强,在函数被调用前触发,在函数后织入增强代码作为后置增强,在函数被调用后触发。
4.根据权利要求3所述的函数调用树生成方法,其特征在于,形成调用树具体包括:
前置增强将函数的标识构造成调用树的一个节点;
获取堆栈的栈顶元素节点,如果堆栈为空,则直接进入堆栈,如果堆栈不为空,则将函数的标识所构造成的节点设为栈顶元素节点的子节点,再放入堆栈;
函数执行完成后,后置增强弹出栈顶元素,如果弹出栈顶元素后发现堆栈已经为空,则对本次请求的处理已经完成,将当前线程上下文中已经构造出的调用树上报;如果栈顶元素不为空,继续执行堆栈中位于栈顶的函数。
5.根据权利要求4所述的函数调用树生成方法,其特征在于,如果函数包括子函数,则形成调用树时依照运行请求中执行函数的顺序进行。
6.一种函数调用树生成系统,其特征在于,所述函数调用树生成系统包括:
字节码转换器,用以在函数的前后分别织入增强代码,以进行字节码增强;
调用树形成模块,...
【专利技术属性】
技术研发人员:洪阿南,
申请(专利权)人:杭州有赞科技有限公司,
类型:发明
国别省市:浙江;33
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。