您的位置:首页 > 编程语言

CodeViz源代码中函数调用关系的调用图生成工具

2009-07-09 19:44 281 查看
1. 安装 GraphViz
用新立得软件管理器

2. 安装CodeViz
tar zxvf codeviz-1.0.11.tar.gz
2.1安装带patch的gcc:
下载gcc-3.4.6.tar.gz
mv gcc-3.4.6.tar.gz codeviz-1.0.11/compilers
cd codeviz-1.0.11/compilers
sudo ./install_gcc-3.4.6.sh /usr/local/gcc-graph

2.2 安装 CodeViz
./configure --gccgraph=/usr/local/gcc-graph
make install-codeviz

3. 使用
#include <stdio.h>
void test(void);
int
main(void)
{
test();
return 0;
}
void test()
{
return;
}

$/usr/local/gcc-graph/bin/gcc test.c

$genfull test.c.cdepn

$gengraph –output-type “png” -f main

skill:
--output-type,指定输出类型,例如png、gif、html和ps,缺省为ps。

解决函数名字冲突:分析哪些目录
使用genfull的-s选项,-s指定了检测哪些子目录。例如kernel中在
mm目录和drivers/char/drm目录下都定义了alloc_pages函数,那么可以以下列方式调用
genfull:
genfull -s "mm include/linux drivers/block arch/i386"

使用 Daemon/Client 模式:
当full.graph很大时,大量的时间花费到读取输入文件上了,例如kernel的
full.graph是很大的,前面生成的大约有15M,这还不是全部内核的函数调用分析信息。
为了节省时间,可以将gengraph以daemon方式运行,这要使用-p选项:
gengraph -p -g linux-2.6.25/full.graph
该命令返回时gengraph以daemon方式运行,同时在/tmp目录下生成了codeviz.pipe文件。
要生成函数调用图,可以使用-q选项:
gengraph -q -t -d 2 -f alloc_pages
要终止gengraph的运行,使用如下命令:
echo QUIT > /tmp/codeviz.pipe

一个例子:
现在我们来看如何生成内核的函数调用图,以2.6.25中alloc_pages函数为例。

首先是编译内核,这里我们的目的是查看函数调用关系,并非安装新内核,所以直接
进行配置编译:
make menuconfig
make CC=/usr/local/gcc-graph/bin/gcc bzImage
make CC=/usr/local/gcc-graph/bin/gcc modules

生成调用图:
genfull -s "mm include/linux drivers/block arch/i386 fs init lib kernel net ipc"
这里使用了-s选项,虽然仍然会产生冲突,但是对于kernel的基本部分来说多数还是没
有冲突的。这里的选择也是为了自己将来分析kernel用,你可以根据自己的需要来生成
full.graph。

生成了full.graph后调用gengraph生成alloc_pages的函数调用图,这里我们先直
接使用项目网站上使用的命令,然后再进行解释:
gengraph -f alloc_pages -d 5
-t -s "buffered_rmqueue out_of_memory try_to_free_pages numa_node_id"
-i "cpuset_zone_allowed"
--output-font "Arial" –output-type "png"

选项:
-d 指定最大调用层数
-s 仅仅显示指定函数,而不对其调用进行展开
-i 忽略指定函数

gengraph -f alloc_pages -d 3 -t --output-font="Arial" --output-type="png"
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: