一.安装过程  
	1.CodeViz的安装

0).确认你已经安装Graphviz[
http://www.graphviz.org/]

1).下载CodeViz.[
http://www.csn.ul.ie/~mel/projects/codeviz/]

具体过程如下:

比如:我下载的是最新的一个版本:codeviz-1.0.11.tar.gz

下面的${CODEVIZ}指的是该文件解压后的目录.

a).tar xzvf codeviz-1.0.11.tar.gz

b).cd ${CODEVIZ}

查看README,因为这关系到后面下载的gcc的版本

c).由于codeviz-1.0.11对应的gcc版本是3.4.6,因此下载的是

gcc-3.4.6.tar.gz

[
ftp://ftp.gnu.org/pub/gnu/gcc/gcc-3.4.6/gcc-3.4.6.tar.gz] 把下载的gcc-3.4.6.tar.gz放入${CODEVIZ}/compilers/

这样,所需的工具基本下载完成了.

2.编译

0).cd ${CODEVIZ}

./configure

1).查看生成的Makefile文件.

由于CodeViz实际上是给gcc打了补丁,然后重新编译gcc,这就涉及到你自己编译

的gcc的安装路径.其路径是Makefile变量中的${GCCGRAPH}定义的,你修改该路径则可以指定你自己编译的

gcc的安装路径,默认的是/usr/local/gccgraph.[推荐不要改变该默认值]

2).make

这就开始编译gcc-3.4.6了,过程有些漫长,可以休息一下去了:)

3).make install 整个过程是不是很简单.
二.CodeViz的使用 
     如果你对这个工具的原理颇感兴趣,哪请参考<分析函数调用关系图(call graph)的几
种方法>:
[http://blog.csdn.net/Solstice/archive/2005/09/24/488865.aspx] 其原理可以简单说明一下:
其基本原理是给 GCC 打个补丁,让它在编译时每个源文件时 dump 出其中函数的 c
all graph,然后用 Perl 脚本收集并整理调用关系,转交给Graphviz绘制图形。
来自<用CodeViz绘制函数调用关系图(call graph)>
[http://blog.csdn.net/Solstice/archive/2005/09/22/486788.aspx] 在这篇文档有简要的使用步骤:
1. 想办法让 gcc 能编译你关心的源码,每个c源文件生成对于的.c.cdepn文件。只
要编译(参数 -c)就行,无需连接。[实际上就是指定编译器为你编译出来的哪个gcc-3.4.
6,关于怎么指定编译编译的问题,就不属于这篇文档的范畴了:)] 2. 调用genfull生成full.graph,这个文件记录了所有函数在源码中的位置和它们之间的
调用关系。[查看帮助的方式genfull --help] 3. 使用gengraph生成我关心的函数的调用关系。[] 关于如何使用gengraph生成你感兴趣的调用图,也请参考上面这篇文档的几个例子,实
在不行,那就看help吧:) 实在不行,哪看[http://www.csn.ul.ie/~mel/projects/codeviz/]

啃E文吧,应该也不算难哦!:) 就是这些了,如何让GNU下的这些工具如何更有创意,就看你的了:) PS:由于上面全是源码安装,应该和发行版无关,不过RH9及其以下偶就不保证了:( 三.CodeViz的使用示例 恩,终于来点正式得了,好了,就从Linux内核得net目录分析起来吧!
编译时记得指定CC=/usr/local/gccgraph/gcc哦,实在不懂,哪请麻烦你去看看Makefile. 好了,先产生full.graph
1.在内核目录下面,指定genfull -s "inlcude/linux net/ipv4"就可以了,不过根据
产生的信息,netfilter这块貌似有很多函数重名哦,由于只是演示一下,先暂且不管了,并且我们这
不是分析netfilter:)[解决重名冲突的方法是指定目录以及文件的时候范围更小一些]
2.根据产生出来的full.graph来生成我们感兴趣的函数调用图
恩,我们就从进入IP层的第一个函数分析起吧--ip_rcv(),暂且分析三层.[层数多了想来也麻烦啊:)]
好了,gengrap用将起来,还是直接给出结果吧,呵呵

   是不是还不错:)
也许你不想先看路由部分代码吧,哪使用-s参数啊,先不看:

    这样是不是明朗很多,呵呵,好了,就说到这了.

参考文档:
1.<用CodeViz绘制函数调用关系图(call graph)>
http://blog.csdn.net/Solstice/archive/2005/09/22/486788.aspx 2.<分析函数调用关系图(call graph)的几种方法>
http://blog.csdn.net/Solstice/archive/2005/09/24/488865.aspx 3.http://www.csn.ul.ie/~mel/projects/codeviz/

CodeViz产生函数调用图的更多相关文章

  1. 【转】doxygen+graphviz生成工程中的类继承树及函数调用图

    转自----hequn8128 在阅读代码量比较多的项目时,类的继承树和函数调用图能够直观地向我们显示类之间或者函数之间的各种关系,方便我们了解程序的整体框架,很多时候可以起到事半功倍的作用.这里尝试 ...

  2. calltree+graphviz 绘出项目函数调用图

    install calltree: download from http://linux.softpedia.com/progDownload/calltree-Download-971.html f ...

  3. tracef 安装 跟踪 函数调用图

    http://www.prevanders.net/dwarf.html redhat 5.4 tar -zxvf libdwarf-20140519.tar.gz [root@localhost d ...

  4. calltree看代码调用图

    calltree是在linux下面看c代码(尤其是复杂的内核代码)的神器. 推荐  calltree+vim + ctags + cscope + taglist [ vim: 搭建vim看代码的环境 ...

  5. 使用gprof2dot和graphivz生成程序运行调用图

    使用gprof2dot和graphivz生成程序运行调用图 gprof2dot是一个将gprof生成的输出转换为dot脚本的工具.通过给定一个gprof的输出文件,将其转换为生成程序调用图的dot脚本 ...

  6. browserify文件后函数调用报is not defined的原因

    举个例子: a.js ; module.exports.a = a; b.js var result = require('./a'); var getA =() => { console.lo ...

  7. $.ajax函数调接口,报异常No converter found for return value of type: class java.util.ArrayList

    接口正常执行,返回给前端后报服务器500异常,异常详情: org.springframework.http.converter.HttpMessageNotWritableException: No ...

  8. js中函数调用时,对参数个数和类型没有要求

    因为js是一种弱类型的编程语言,对数据类型的要求没有其他编程语言的要求严格,所以在定义函数的时候不需要像java一样对其传入参数的类型进行定,也对传入参数的个数没有要求. js函数的参数与大多数其他语 ...

  9. Servlet第二篇【Servlet调用图、Servlet细节、ServletConfig、ServletContext】

    Servlet的调用图 前面我们已经学过了Servlet的生命周期了,我们根据Servlet的生命周期画出Servlet的调用图加深理解 Servlet的细节 一个已经注册的Servlet可以被多次映 ...

随机推荐

  1. 四、使用Maven和使用Eclipse构建javaWeb项目

    环境前边已经搭建过了,我们就再弄了. 1.使用Maven构建javaWeb项目 (1).键入以下命令: $ mvn archetype:generate -DgroupId=com.holytax.w ...

  2. c编程:用户输入一个数值n,打印出出1到n之间的所有质数

    #include <stdio.h> int func(int i ) { //定义一个变量temp=2,当主函数引入的数大于temp时进入for循环.当它在比自己小的数中找到一个能背整除 ...

  3. c语言中的结构体为值类型,当把一个结构体赋值给另一个结构体时,为值传递

    #include <stdio.h> int main() { struct person { int age; }; }; //值传递,将p1中所有成员变量的值赋值个p2中对应的成员变量 ...

  4. 【笔记】mongodb启动不了:child process failed, exited with error number 100

    今天在启动mongodb的时候,发现起不来,报错:child process failed, exited with error number 100然后先去/var/log/mongo/mongod ...

  5. LA 3708 Graveyard(推理 参考系 中位数)

    Graveyard Programming contests became so popular in the year 2397 that the governor of New Earck -- ...

  6. OpenCV(4)-图像掩码操作(卷积)--平滑处理

    卷积定义 矩阵的掩码操作即对图像进行卷积.对图像卷积操作的意义为:邻近像素对(包括该像素自身)对新像素的影响:影响大小取决于卷积核对应位置值得大小. 例如:图像增强可以使用 \[ I(i,j)=5*I ...

  7. 远程mysql出现ERROR 1130 (HY000): Host '172.17.42.1' is not allowed to connect to this MySQL server

    ERROR 1130: Host ***.***.***.*** is not allowed to connect to this MySQL server 说明所连接的用户帐号没有远程连接的权限, ...

  8. WinForm TreeView 三种状态

    private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) { var node = e.N ...

  9. css设置文字不换行,超过的部分用“...”代替

    设置文字不换行,超过的部分用“...”代替 overflow: hidden;  text-overflow: ellipsis;  white-space: nowrap;  width: /*so ...

  10. tree命令

    tree命令以树状图列出目录的内容. 1.语法 tree(选项)(参数) 2.选项 -a:显示所有文件和目录: -A:使用ASNI绘图字符显示树状图而非以ASCII字符组合: -C:在文件和目录清单加 ...