CodeViz原始碼中函數調用關係的調用圖產生工具

來源:互聯網
上載者:User

 
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"
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.