0.我使用的环境信息
我是在虚拟机中安装的RHRL5。
1.graphviz的安装(除开程序流程图外,它还可以画很多其他图)
开始我在graphviz的主页上: http://www.graphviz.org/Download.php 没有找到地方下载源码。尴尬啊!
后来在CU下载里: http://download.chinaunix.net/download/0005000/4119.shtml ,下载了tar.gz包。几次安装没有成功。
最后在还是在其主页上找到了rpm包: http://www.graphviz.org/Download_linux_rhel.php 。安装rpm包也不是一帆风顺,因为缺少动态链接库。google之,才晓得红帽有专门的网站,可以下载各个版本的rpm包。
安装软件对于现在的我来说还需要花点时间哦。常常是:(……)
但是先看README,INSTALL的习惯,我还是有的。
2.codeviz的安装
在 http://www.csn.ul.ie/~mel/projects/codeviz/ 下载。
其README里有提示:
由于
codeviz-1.0.11.tar.gz
,Finally, support for gcc 3.4.6 was provided by Michael Iatrou.因而还需要下载 gcc-3.4.6.tar.gz,将其放入codeviz-1.0.11/compilers/目录下。也就是说,要分析的程序需要经过打了补丁的gcc-3.4.6编译(*.c文件对应*.c.depn),因此需要注意gcc的路径。
至于为什么这样做:“ 由于CodeViz实际上是给gcc打了补丁,然后重新编译gcc,这就涉及到你自己编译 的gcc的安装路径.其路径是Makefile变量中的${GCCGRAPH}定义的,你修改该路径则可以指定你自己编译的 gcc的安装路径,默认的是/usr/local/gccgraph.[推荐不要改变该默认值] ”。
CU下载比较方便,可是是gcc-3.4.6.tar.bz。我试了下,第一次没有成功。还是下个tar.gz , http://ftp.gnu.org/gnu/gcc/gcc-3.4.6/ 。
编译的过程真的有点漫长~
3.axel程序的函数调用关系
这个程序是在CU论坛 源码阅读第一期:axel和wget 中的一个程序。可是我至今没有去分析~
我的一个简单shell脚本,用于产生某个函数的调用图:
生成的full.graph文件部分内容,还是比较好懂的。
先上两张axel程序main函数的调用关系图(比较一下,吸引大家的兴趣~)
包含库函数:(有点大2.0Mb)
不包含库函数:(0.4Mb)
使用帮助信息更好地掌握其使用,很简单明了:
genfull --help
gengraph --help
在网上找到一个“ CodeViz —— 一款分析C/C++源代码中函数调用关系的调用图生成工具 ”分享给大家。
CodeViz 一款分析CC++源代码中函数调用关系的调用图生成工具.zip
4.疑问
gcc-4.XX与gcc-3.4.6区别?
genfull生成的full.graph有各个函数的标号。但是我发现如果自定义的一个函数没有调用库函数的话,那么这个自定义的函数不能被识别???这个???
5.参考
我是在虚拟机中安装的RHRL5。
1.graphviz的安装(除开程序流程图外,它还可以画很多其他图)
开始我在graphviz的主页上: http://www.graphviz.org/Download.php 没有找到地方下载源码。尴尬啊!
后来在CU下载里: http://download.chinaunix.net/download/0005000/4119.shtml ,下载了tar.gz包。几次安装没有成功。
最后在还是在其主页上找到了rpm包: http://www.graphviz.org/Download_linux_rhel.php 。安装rpm包也不是一帆风顺,因为缺少动态链接库。google之,才晓得红帽有专门的网站,可以下载各个版本的rpm包。
安装软件对于现在的我来说还需要花点时间哦。常常是:(……)
点击(此处)折叠或打开
- ./configure
- make
- make install
2.codeviz的安装
在 http://www.csn.ul.ie/~mel/projects/codeviz/ 下载。
其README里有提示:
点击(此处)折叠或打开
- Installing
- ----------
-
- cd codeviz
- cp ./lib/* -rv /usr/lib/ (Or your preferred perl library path)
- cp ./bin/* /usr/local/bin
至于为什么这样做:“ 由于CodeViz实际上是给gcc打了补丁,然后重新编译gcc,这就涉及到你自己编译 的gcc的安装路径.其路径是Makefile变量中的${GCCGRAPH}定义的,你修改该路径则可以指定你自己编译的 gcc的安装路径,默认的是/usr/local/gccgraph.[推荐不要改变该默认值] ”。
CU下载比较方便,可是是gcc-3.4.6.tar.bz。我试了下,第一次没有成功。还是下个tar.gz , http://ftp.gnu.org/gnu/gcc/gcc-3.4.6/ 。
编译的过程真的有点漫长~
3.axel程序的函数调用关系
这个程序是在CU论坛 源码阅读第一期:axel和wget 中的一个程序。可是我至今没有去分析~
我的一个简单shell脚本,用于产生某个函数的调用图:
点击(此处)折叠或打开
- #!/bin/sh
- /usr/local/gccgraph/bin/gcc -c *.c *.cc
- #产生
- genfull
- read fun
- gengraph --output-type png --no-extern -f ${fun}
点击(此处)折叠或打开
- digraph fullgraph {
- node [ fontname=Helvetica, fontsize=12 ];
- "ftp_wait" [label="ftp_wait\nftp.c:297:"];
- "axel_divide" [label="axel_divide\naxel.c:574:"];
- "save_state" [label="save_state\naxel.c:499:"];
- "axel_start" [label="axel_start\naxel.c:218:"];
- "search_makelist" [label="search_makelist\nsearch.c:66:"];
- "print_messages" [label="print_messages\ntext.c:583:"];
- .......
- "stat" -> "__xstat" [label="/usr/include/sys/stat.h:436"];
- "lstat" -> "__lxstat" [label="/usr/include/sys/stat.h:443"];
- "fstat" -> "__fxstat" [label="/usr/include/sys/stat.h:450"];
- "mknod" -> "__xmknod" [label="/usr/include/sys/stat.h:466"];
包含库函数:(有点大2.0Mb)
不包含库函数:(0.4Mb)
使用帮助信息更好地掌握其使用,很简单明了:
genfull --help
gengraph --help
在网上找到一个“ CodeViz —— 一款分析C/C++源代码中函数调用关系的调用图生成工具 ”分享给大家。
CodeViz 一款分析CC++源代码中函数调用关系的调用图生成工具.zip
4.疑问
gcc-4.XX与gcc-3.4.6区别?
genfull生成的full.graph有各个函数的标号。但是我发现如果自定义的一个函数没有调用库函数的话,那么这个自定义的函数不能被识别???这个???
5.参考
用CodeViz产生函数调用图(原创)http://barry-popy.blog.sohu.com/31629163.html
转自:http://blog.chinaunix.net/uid-25194149-id-3218529.html