用CodeViz產生函數調用圖

一.安裝過程 
	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/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章