天人合一之毕设——准备阶段—— 2 函数调用图(call graph)

本文介绍了如何使用Doxygen和graphviz工具来构建函数调用图,重点在于配置Doxygen以生成调用图,并探讨了静态与动态分析的差异。通过静态分析,作者发现调用顺序可能存在一些问题,而动态分析如gprof能提供更详细的函数调用信息。文章还提到了其他动态分析工具,如callgrind和KCachegrind。
摘要由CSDN通过智能技术生成

 毕设要把数据对象的访问频率和时序图都提取出来,师兄提供了一个关于函数调用树的思路,可以简化提取过程,构造好之后就是遍历了。上网搜了下,专有名称叫函数调用图,应该是考虑到一个函数可能被多个函数调用,所以不只有一个根节点。

       工具有很多,盗个图过来(转载自http://blog.csdn.net/solstice/article/details/488865),静态分析是指在不运行前进行分析,那么动态分析自然就是记录程序实际运行时的函数调用情况了。静态分析又有两种方法,一是分析源码,二是分析编译后的目标文件。我目前主要是想做静态的源码分析,所以想先试试Doxygen(http://www.stack.nl/~dimitri/doxygen/download.html)

Doxygen是源码文档化工具,也能绘制调用图。 绘图要借助于graphviz工具,首先到官网下载

(https://graphviz.gitlab.io/_pages/Download/Download_windows.html)

对这个画图工具感兴趣,可以参考这篇博客 http://blog.csdn.net/lanchunhui/article/details/49472949

 在网站downloads页面下载binary文件,有Linux版本和Windows版本,比较方便。如果感兴趣,网站也提供了source file,可以自行下载编译,网站帮助文档里面有教程。

 下载好之后打开bin目录下的doxywizard.exe,就会出现配置界面。

1.wizard选项卡中

       先设置doxygen生成文档的工作空间,然后选择Project Name作为工程名称,将来会显示在文档的标题中;选择Source code directory,设置源代码所在目录,Destination directory设置文档的生成目录;选择Scan recursively则递归分析源代码目录中的子目录内的源代码。mode)中选择要处理的语言。在diagram选项里选择用graphviz里的dot工具,在下面产生选项勾住没有默认的几项(不太知道call graphs和called by graphs和他有什么区别,先都勾住吧)

2.Expert选项卡

在build中主要勾选

 EXTRACE_ALL, EXTRACE_PRIVATE, EXTRACE_STATIC, EXTRACE_LOCAL_CALSSES, EXTRACE_LOCAL_METHODS

 Dot中设置DOT_PATH即doc.exe的位置,位于graphviz安装路径下的bin目录下。(这里比较关键,我一开始没设置路径,识别不出graphviz的地址,继承关系解析出来了,但是图没画出来)。

 3.Run选项卡

 点击run doxygen,在dictionary_8c.html里得到最后的call graph。经过我人工检验,调用关系没有什么问题。但是好像顺序有点不对,按理说是init、insert、value再deinit,可能是init里调用了deinit的缘故,所以抬到上面来了。

 还有一个问题就是对于一些分支,静态分析不知道执行不执行,也会直接在调用里面也链接在init后面了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值