calltree的安装与使用

目录

0 calltree 和 graphviz的关系

1 graphviz的安装很简单 : 

2 有难的是calltree的安装,需要改一下代码.

Doxygen的使用

 参考

 这个人的笔记都挺好的, 没事多看看


0 calltree 和 graphviz的关系

要想绘制函数调用图的话,需要用到2个工具, calltree 和 graphviz.

calltree用来生成函数调用的关系; graphviz用来根据关系图来生成图像或者pdf.

1 graphviz的安装很简单 : 

使用calltree生成的dot来绘图的程序是 graphviz, 可以从下面的官网页面下载.

Download | Graphviz

或者Ubuntu直接使用命令安装

sudo apt-get install graphviz

2 有难的是calltree的安装,需要改一下代码.

首先下载源码:

Schily Tools - Browse /calltree at SourceForge.net

Calltree - Free Software Directory

https://osdn.net/projects/sfnet_schilytools/downloads/calltree/calltree-2.3.tar.bz2/

下面的README其实已经说了编译的命令

https://github.com/xunknown/calltree/blob/master/GUIDE

安装:

下载地址:http://download.chinaunix.net/download.php?id=2245&ResourceID=1172

解压后直接make即可,在make过程中会遇到错误,解决的命令

1、cp RULES/i686-linux-cc.rul RULES/x86_64-linux-cc.rul

calltree的安装与使用_第1张图片

 出现这个错误,执行1的命令

2、

 

find . -name "*.[c|h]" |xargs sed -i -e "s/fexecve/fexecve_calltree/"
find . -name "*.[c|h]" |xargs sed -i -e "s/getline/getline_calltree/"
find . -name "*.[c|h]" -exec grep getline -nH {} \;

find . -name "*.[c|h]" -exec grep fexecve -nH {} \;

之后就可以make成功, 在make install的时候记得加上sudo, 否则权限问题会导致有些目录无法cp成功.

calltree的安装与使用_第2张图片
3、
安装好后,软链接到/usr/bin目录下  ln -s /home/XXX/calltree/OBJ/x86_64-linux-cc/calltree /usr/bin/calltree
我没有做上面的软链接, 而是找到calltree的安装目录

 calltree的安装与使用_第3张图片

 然后在 /etc/profile 里面加上PATH的路径, 就可以在任意目录调用了

calltree的安装与使用_第4张图片

 之后 source  /etc/profile 就可以生效, 在任意目录call 之后 按 tab 补全命令, 可以看到就是成功了 

calltree的安装与使用_第5张图片

之后就可以按照作者提供的命令对 linux kernel 或者 libuv 等进行分析了.

使用:
-g输出函数所在文件的目录

-m参数只用于分析main函数中的函数调用关系。

-p参数是默认的。它表示要使用C语言预处理程序分析代码。缺点是它会产生很多我们不关心的消息。

-np和-p是相反的。它表示不要使用C语言预处理程序分析代码。如果指定它,可能会导致分析过程出错。因为像开源项目,有几个不需要预处理处理下呢?

-xvcg参数表示导出一个可以使用VCG软件处理的格式的文件。
-dot参数表示导出一个dot格式文件,可以供graphviz处理的。

list可以让我们指定仅仅需要分析的函数里的函数调用。

还有一个重要的选项是listfunction ,缩写是lf,用来只打印某个函数中的调用,用法是: lf=your_function

使用一:

#calltree -np -b  list=start_kernel  depth=3 `find ./init/ ./kernel/ -name "*.c"` > maps

#vi maps


使用二:
calltree -np -b -dot list=start_kernel ./init/*.c > ~/start_kernel.dot
dot -T png start_kernel.dot -o ./testhaha.png

使用三:
calltree -dot list="ev_run" *.c > ev_run.dot
     
dot -Tgif ev_run.dot -o ev_run.gif


参考链接:
https://www.2cto.com/kf/201707/660151.html

http://www.cnblogs.com/mylinux/p/6145625.html


Doxygen的使用

这里附上一个Windows平台可以生成调用图,单独使用的工具

Doxygen: Downloads

linux的部分可以使用下面2个命令安装

sudo apt install doxygen

sudo apt install doxygen-gui

参考的是 [Linux|doxygen + graphviz]接手没有注释的新项目怎么快速入手?快使用doxygen + graphviz快速生成项目文档! - 知乎

终端里面输入 doxywizard 来启动工具

calltree的安装与使用_第6张图片

 我的配置如上图

然后下个tab里面, 勾选前6项

calltree的安装与使用_第7张图片

 calltree的安装与使用_第8张图片

 这2个要勾选上, 然后指定路径

calltree的安装与使用_第9张图片

calltree的安装与使用_第10张图片

 打开之后这里有很多参考的内容了

calltree的安装与使用_第11张图片

里面也有一些函数调用图 

生成的index.html多而且文件太碎了, 使用 hugeCHM将html转为chm方便观看

calltree的安装与使用_第12张图片

 打包完成从之前的500M变为了120M, 还是太大了, 而且没有html看着格式好看,那还是看html的版本算了.


 参考

cflow的地址

GNU cflow


 这个人的笔记都挺好的, 没事多看看

软件开发平台及语言笔记大全(超详细)

我发现了另一个工具 callgraph, 做为 calltree的更好用的替代

靜態分析 C 程序函數調用關係圖-软件开发平台及语言笔记大全(超详细)
 

你可能感兴趣的:(Ubuntu,linux)