开发者社区> double2li> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

CodeViz产生函数调用图

简介: 一.安装过程   1.CodeViz的安装 0).确认你已经安装Graphviz[ http://www.graphviz.org/] 1).下载CodeViz.[ http://www.
+关注继续查看
一.安装过程  
	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/

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
十分钟上线-函数计算&Laravel的那些事儿
这篇文章是[十分钟上线-函数计算玩转 WordPress](https://yq.aliyun.com/articles/640912)的姊妹篇,本文中我们将github上一个star很高的larvel入门博客教程Learn-Laravel-5项目移植到在函数计算上, 展示函数计算环境驱动laravel的能力,实现 laravel web 项目 serverless 化。
4709 0
为什么要做用户调研?
在前面的文章中有写过如何快速的了解一款产品(回看请戳下面链接),但在产品初期可获取的用户反馈相对来说是有限或没有的,那么当我们接到对产品优化的工作时就要主动去了解用户,这个时候我们要怎么做呢?今天这篇文章就和大家聊下用户调研。
1171 0
为什么要学习函数式编程?因为如果你手里只有锤子,看什么都像钉子
函数式编程是一种“编程范式”,也就是如何编写程序的方法论,其主要思想是把运算过程尽量写成一系列嵌套的函数调用。那么在函数式编程比较火爆的今天,我们为什么要学习它呢?学习函数式编程究竟能为我们带来什么呢?本文或许能给你一点启发。
4201 0
云加数商业地产转型——基于阿里云构建云+中台
本文的整理自2017云栖大会-上海峰会正佳金控集团CIO宋亦皇的分享讲义,讲义主要介绍了数据和云计算催生了那些新的商业模式。并且在介绍了云计算和数据在其中的地位。
2284 0
【三生三世三月八,快给女神送鲜花!】3.8女神节特别活动
阿里巴巴创新中心携手创头条、优客工场、Flowerplus等 为您和您的她送上女神花束。
2800 0
推荐15款最佳的响应式 Web 设计测试工具
  响应式网页设计是根据设备的屏幕尺寸,平台和方向来开发的网页,是一种对最终用户的行为和环境作出反应的方法。响应式设计使用灵活的网格和布局,图像和智能使用 CSS 媒体查询的组合。当从它们在不同设备使用的时候,网站能够自动切换到容纳该特定分辨率,图像尺寸和脚本的能力。
1030 0
使用CodeDom生成程序集
http://www.rainsts.net/article.asp?id=106 using System;using Microsoft.CSharp;using System.CodeDom.
612 0
+关注
double2li
一个在IT行业摸爬滚打的老司机
2869
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载
低代码开发师(初级)实战教程
立即下载