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