CodeViz产生函数调用图
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 整个过程是不是很简单.
如果你对这个工具的原理颇感兴趣,哪请参考<分析函数调用关系图(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产生函数调用图的更多相关文章
- 【转】doxygen+graphviz生成工程中的类继承树及函数调用图
转自----hequn8128 在阅读代码量比较多的项目时,类的继承树和函数调用图能够直观地向我们显示类之间或者函数之间的各种关系,方便我们了解程序的整体框架,很多时候可以起到事半功倍的作用.这里尝试 ...
- calltree+graphviz 绘出项目函数调用图
install calltree: download from http://linux.softpedia.com/progDownload/calltree-Download-971.html f ...
- tracef 安装 跟踪 函数调用图
http://www.prevanders.net/dwarf.html redhat 5.4 tar -zxvf libdwarf-20140519.tar.gz [root@localhost d ...
- calltree看代码调用图
calltree是在linux下面看c代码(尤其是复杂的内核代码)的神器. 推荐 calltree+vim + ctags + cscope + taglist [ vim: 搭建vim看代码的环境 ...
- 使用gprof2dot和graphivz生成程序运行调用图
使用gprof2dot和graphivz生成程序运行调用图 gprof2dot是一个将gprof生成的输出转换为dot脚本的工具.通过给定一个gprof的输出文件,将其转换为生成程序调用图的dot脚本 ...
- browserify文件后函数调用报is not defined的原因
举个例子: a.js ; module.exports.a = a; b.js var result = require('./a'); var getA =() => { console.lo ...
- $.ajax函数调接口,报异常No converter found for return value of type: class java.util.ArrayList
接口正常执行,返回给前端后报服务器500异常,异常详情: org.springframework.http.converter.HttpMessageNotWritableException: No ...
- js中函数调用时,对参数个数和类型没有要求
因为js是一种弱类型的编程语言,对数据类型的要求没有其他编程语言的要求严格,所以在定义函数的时候不需要像java一样对其传入参数的类型进行定,也对传入参数的个数没有要求. js函数的参数与大多数其他语 ...
- Servlet第二篇【Servlet调用图、Servlet细节、ServletConfig、ServletContext】
Servlet的调用图 前面我们已经学过了Servlet的生命周期了,我们根据Servlet的生命周期画出Servlet的调用图加深理解 Servlet的细节 一个已经注册的Servlet可以被多次映 ...
随机推荐
- swift-08-元组分解和数组
//1.有时候需要把元组中的数据拆分出来使用比如: var stu = ("范冰冰",30,"女") // 1)将stu中的数据赋值给三个变量. var (na ...
- requirejs实践二 加载其它JavaScript与运行
上一篇中介绍了requirejs加载JavaScript文件,在这一篇中介绍加载JavaScript后执行代码 这次是test2.html文件, <!DOCTYPE html> <h ...
- 「Windows MFC 」「Edit Control」 控件
「Windows MFC 」「Edit Control」 控件
- linux管道学习(一)
最近学习了管道 pipe,在这里进行一下总结. 这里贴一段自己的实做代码 struct node{ int a; long b; }; int main() { ]; pid_t pid; ]; in ...
- (转)Libevent(4)— Bufferevent
转自:http://name5566.com/4215.html 参考文献列表:http://www.wangafu.net/~nickm/libevent-book/ 此文编写的时候,使用到的 Li ...
- 自己编写的sublime text 3 插件
一些小功能,比较杂. 具体的功能在这里查看 1.本地环境的php运行结果获取. 2.快捷打开常用的文件,文件夹,url.(ctrl+shift+a) 3.常用的缩进转换. 下边是网络爬虫代码. #py ...
- C#winform程序安装时自动卸载新版本覆盖旧版本
vs2005为winform程序做的安装包.在以有程序旧版本的机子上用新版本的安装包安装软件时提示 “以经安装该产品的另一个版本.无法继续安装此版本........” 在安装部署项目中设“Remov ...
- 黑马程序员-------.net基础知识一
一 初识.net .net是一种多语言的编程平台,可以用多达几十种的语言来进行开发,而C#就是基于.net平台的其中一种开发语言. 它的特点是: ⒈多平台:该系统可以在广泛的计算机上运行,包括从服务 ...
- android SurfaceView绘制 重新学习--控制动画移动
直接上demo,图是自己切的,将就用吧.点击左右两边分别向左右移动. public class MySurfaceView extends SurfaceView implements Callbac ...
- C#中的委托事件的分析
推荐:http://www.cnblogs.com/SkySoot/archive/2012/04/05/2433639.html 委托和事件在 .NET Framework 中的应用非常广泛,然而, ...