<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    CodeViz產生函數調用圖

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接 一.安裝過程  
    	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用將起來,還是直接給出結果吧,呵呵

    RFID設備管理軟件


    是不是還不錯:)
    也許你不想先看路由部分代碼吧,哪使用-s參數啊,先不看:

    RFID設備管理軟件

        這樣是不是明朗很多,呵呵,好了,就說到這了.

    參考文檔:
    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/
    RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全