[发明专利]一种函数调用关系的获取方法和装置有效
| 申请号: | 201210523735.3 | 申请日: | 2012-12-07 |
| 公开(公告)号: | CN103853603B | 公开(公告)日: | 2018-03-13 |
| 发明(设计)人: | 阮辉;郭朝楠;谢平 | 申请(专利权)人: | 腾讯科技(深圳)有限公司 |
| 主分类号: | G06F9/46 | 分类号: | G06F9/46 |
| 代理公司: | 北京三高永信知识产权代理有限责任公司11138 | 代理人: | 罗振安 |
| 地址: | 518000 广东省深圳*** | 国省代码: | 广东;44 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 函数 调用 关系 获取 方法 装置 | ||
技术领域
本发明涉及计算机领域,特别涉及一种函数调用关系的获取方法和装置。
背景技术
在大型软件开发过程中,特别是在多人协作的开发场景中,经常需要构造程序执行过程中函数调用关系图,以使开发者根据函数调用关系图理解程序或者程序片段在实际执行时的动态行为。
目前现有技术存在获取函数调用关系的方法,可以通过该方法获取程序运行过程中调用函数的函数调用关系图;但是在程序执行的过程中,如果存在多个进程或多个线程同时执行相同函数时,通过现有技术只获取到一个函数调用关系图,而这与程序实际执行流不符。
发明内容
为了在程序运行的过程中,如果存在多个进程或多个线程同时运行相同函数时,构造出与程序实际执行流相符的函数调用关系图,本发明提供了一种函数调用关系的获取方法和装置。所述技术方案如下:
一种函数调用关系的获取方法,所述方法包括:
当程序运行过程中调用函数时,获取所述函数的函数信息,所述函数信息包括所述函数的入口地址、出口地址、所述函数所在文件的文件信息在信息列表中的序号,所述信息列表用于存储文件的文件信息;
获取用于运行所述函数的执行单元,所述执行单元包括进程或线程;
根据所述执行单元运行的函数的函数信息构造所述执行单元对应的函数调用关系图;
其中,所述获取所述函数所在文件的文件信息在信息列表中的序号,包括:
根据所述函数的入口地址,判断所述函数是否为程序中包含的函数;
如果所述函数是所述程序中包含的函数,判断序号空间中是否包括所述程序所在文件的文件信息在信息列表中的序号,如果所述序号空间中包括所述程序所在文件的文件信息在所述信息列表中的序号,则将所述序号空间包括的所述程序所在文件的文件信息在所述信息列表中的序号确定为所述函数所在文件的文件信息在所述信息列表中的序号。
所述方法还包括:
如果所述序号空间为空,则获取所述函数所在文件的文件信息,将所述函数所在文件的文件信息存储在所述信息列表中,设置所述函数所在文件的文件信息在所述信息列表中的序号,将所述函数所在文件的文件信息在所述信息列表中的序号存储在所述序号空间中。
所述方法还包括:
如果所述函数不是所述程序中包含的函数,则判断出所述函数为动态链接库包含的函数,根据所述函数的入口地址查找所述信息列表,当查找出所述信息列表中存在所述动态链接库所在文件的文件信息,则将所述动态链接库所在文件的文件信息在所述信息列表中的序号确定为所述函数所在文件的文件信息在所述信息列表中的序号。
所述方法还包括:
当查找出所述信息列表中不存在所述动态链接库所在文件的文件信息,获取所述动态链接库所在文件的文件信息,将所述动态链接库所在文件的文件信息存储在所述信息列表中,设置所述动态链接库所在文件的文件信息在所述信息列表中的序号。
所述根据所述执行单元对应的函数的函数信息构造所述执行单元对应的函数调用关系图之后,还包括:
从所述执行单元对应的函数调用关系图中过滤系统函数及所述系统函数的调用关系。
所述从所述执行单元对应的函数调用关系图中过滤系统函数的调用关系,包括:
计算所述执行单元对应的函数调用关系图中包括的函数的入度和出度,所述函数的入度为调用所述函数的函数的个数,所述函数的出度为所述函数调用的函数的个数;
过滤出度为零的系统函数及所述系统函数的调用关系,减少调用所述系统函数的函数的出度;
过滤入度为1且出度为1的系统函数及所述系统函数的调用关系,增加调用所述系统函数的函数和所述系统函数调用的函数之间的调用关系;
根据所述函数调用关系图中包括的剩下函数的函数信息重新构建函数调用关系图,计算所述函数调用关系图包括的函数的出度和入度;
过滤入度为零的系统函数及所述系统函数的调用关系,以及减少所述系统调用的函数的入度。
所述获取所述函数的函数信息之前,还包括:
接收开始时间和结束时间,在所述开始时间和所述结束时间之间设置记录标识为真;
所述获取所述函数的函数信息,包括:
当程序运行过程中调用函数时,对所述记录标识进行判断,如果所述记录标识为真,则获取所述函数的函数信息。
一种函数调用关系的获取装置,所述装置包括:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于腾讯科技(深圳)有限公司,未经腾讯科技(深圳)有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201210523735.3/2.html,转载请声明来源钻瓜专利网。





