zoukankan      html  css  js  c++  java
  • Codeviz 分析kernel源程序

    Codeviz是一款开源的用于自动生成C/C++源程序调用关系图的工具,其主页地址为http://www.csn.ul.ie/~mel/projects/codeviz/ 。

    CodeViz的实现原理是通过给GCC打补丁,而且不同版本的CodeViz对应的GCC的版本也不一致。

    本文使用的是codeviz-1.0.11版本,codeviz-1.0.11.tar.gz。

    解压后的目录中compiler子目录是用来存放对应版本的的gcc源码的目录。要查看Codeviz对应的GCC的版本号,查看Makefile文件。

    bl25p-18:~/codeviz-1.0.11# cat  Makefile
    TOPLEVEL = /root/codeviz-1.0.11
    PREFIX = /usr/local
    GCCVERSION = 3.4.6
    PERLLIB = /usr/local/lib/perl/5.10.0
    GCCGRAPH = /usr/local/gccgraph

    Codeviz的安装脚本install_gcc-3.4.6.sh会自动检查安装对应的gcc,但是,我在Debian5上试验的时候对应的gcc ftp服务器无法访问,所以通过手动安装的方式来完成。

    下载gcc-3.4.6.tar.gz(ftp://ftp.mirrorservice.org/sites/sourceware.org/pub/gcc/releases/gcc-3.4.6/)到codeviz解压目录下的compiler子目录下。install_gcc-3.6.4.sh会自动检查gcc的源码包是否已经在compiler子目录下。如果已经存在,它将会进行解压,并且打codeviz提供的gcc patch文件,并将其安装到指定的目录下。默认GCC安装目录是HOME/gcc-graph,可以通过给install_gcc-3.6.4.sh脚本指定参数来设置gcc的安装目录。

    ./install_gcc-3.4.1.sh /usr/local/gcc-graph
    
    接下来,安装codeviz通过如下命令,
    
    当前目录为codeviz源码包解压的后的根目录:
    
    ./configure
    
    make
    
    make install-codeviz (install-codeviz target会将genfull和gengraph安装到/usr/local/bin目录下)
    
    另外,Graphviz 支持生成不同更改的调用图,在debian下可以通过aptitude install GraphViz来进行安装。
    

    当所有的准备都完成以后,可以使用Codeviz来生成源码调用图。假设你已经下载了linux kernel源代码包,并且已经解压。
    
    在kernel的根目录下,使用codeviz打过patch的gcc来编译kernel源代码(注意,并不需要连接)。
    
    make CC=$HOME/gcc-graph/bin/gcc
    
    这是对每一个被编译的源文件,会对应生成一个cdepn文件。codeviz会使用cdepn文件来生成调用图。
    
    通过genfull来生成full.graph,这个文件时生成其它调用图的基础。
    
    genfull -g cobjdump -o full.graph-objdump
    
    genfull -g cdepn -o full.graph-cdepn
    
    gengraph -t -d 5 -g full.graph-objdump  -f kswapd -o kswapd-objdump.ps
    
    gengraph -t -d 5 -g full.graph-cdepn -f kswapd -o kswapd-cdepn.ps
    

    生成调用图
    
    通过gengraph 命令
    
    Step 1: gengraph -f alloc_pages


    Step 2: gengraph -d 10 -f alloc_pages


    Step 3: gengraph -t -d 10 -f alloc_pages


    Step 4: gengraph -t -d 10 -s "shrink_cache" -f alloc_pages


    Step 5: gengraph -t -d 10 -s "shrink_cache try_to_free_pages_zone" -i "__free_pages_ok" -f alloc_pages
     

    alloc_pages

    参考文件

    【1】http://www.csn.ul.ie/~mel/projects/codeviz/

    【2】http://www.cnblogs.com/xuxm2007/archive/2010/10/14/1851086.html

  • 相关阅读:
    【Oracle-DBA】Oracle连接非常慢APPARENT DEADLOCK
    【PC-x86-x64】JDK 32bit与64bit的区别及x64 PC的发展历程【转】
    css框架,一把锋利的剑
    OnContextMenu事件(转)
    960网格,一个web时代的标志。
    程序员取名:用大数据分析一下宝宝取名时最容易重复的名字
    创建你的第一个JavaScript库
    5个经典的前端面试问题,你行吗?
    一个由SEO优化展开的meta标签大讲解
    HTML5页面开发的基础性模板
  • 原文地址:https://www.cnblogs.com/yuboyue/p/2349493.html
Copyright © 2011-2022 走看看