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

 
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"
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值