Codeviz+Graphviz+gcc的安裝及使用

來源:互聯網
上載者:User
CodeViz是《 Understanding The Linux Virtual Memory Manager 》( at Amazon , 下載地址 在頁尾)的作者  Mel Gorman  寫的一款分析C/C++原始碼中函數調用關係的open source工具(類似的open source軟體有 egypt 、 ncc )。 其基本原理是給 GCC 打個補丁,讓它在編譯時間每個源檔案時 dump 出其中函數的 call graph,然後用 Perl 指令碼收集並整理調用關係,轉交給Graphviz繪製圖形。

安裝前提:經筆者多次測試,發現在64位linux安裝失敗,在32位rhel 6.5下面安裝成功
一、下載安裝包   1、 codeviz-1.0.12             http://www.csn.ul.ie/ ~mel/projects/codeviz/   2、 graphviz-2.38.0        http://www.graphviz.org/Download_source.php   3、gcc-4.6.2        http://ftp.gnu.org/gnu/gcc/gcc-4.6.2/gcc-4.6.2.tar.gz   4、安裝gcc需要的依賴包     4.1  mpc-1.0.3          http://www.multiprecision.org/index.php?prog=mpc&page=download     4.2  mpfr-3.1.4          http://www.mpfr.org/     4.3  gmp-5.0.1          https://gmplib.org/
二、安裝     1、將下載的安裝包放在/home/shlian/Downloads/目錄,依次解壓:codeviz、graphviz、mpc、mpfr、gmp到目前的目錄
    2、安裝gcc依賴包         cd gmp-5.0.1         ./configure --prefix=/usr && make && sudo make install && cd ../mpfr-3.1.4 && ./configure --prefix=/usr && make && sudo make install && cd ../mpc-1.0.3 && ./configure --prefix=/usr && make && sudo make install         執行下面的命令,依次安裝gmp、mpfr和mpc,因為mpc依賴於gmp、mpfr     3、安裝graphviz        cd graphviz-2.38.0         ./configure --prefix=/usr && make && sudo make install     4、安裝codeviz        cd codeviz-1.0.12        cp ../gcc-4.6.2.tar.gz compilers         ./configure --prefix=/usr && make && sudo make install        安裝gcc大約需要一個小時左右,慢慢的讓他安裝吧 …… ……經過耐心的等待,終於安裝完成,然後就可以使用了
       安裝完成後,會有如下資訊: Patched gcc is installed to /usr/local/gccgraph. To compile a project  for  use with CodeViz, genearlly the following will work  make CC=/usr/local/gccgraph/bin/gcc  or g++ To generate a full.graph file  for C,  use genfull  For C++, make sure you  use the cppdepn method with  genfull -g cppdepn  or the results will not be what you expect.
        這個gcc預設會被安裝到/usr/gccgraph/bin/目錄,
三、使用流程

1. 使用剛剛安裝的gcc-4.6.2來編譯目前的目錄下所有.c檔案,gcc/g++為編譯的每個 C/C++檔案產生.cdepn 檔案。只要編譯(參數 -c)就行,無需連結。

即為:/usr/gccgraph/bin/gcc test.c -c


2.調用genful會在目前的目錄產生一個full.graph檔案,該指令碼可以產生項目的完整調用圖資訊檔,記錄了所有函數在源碼中的位置和它們之間的調用關係。 因此調用圖資訊檔可能很大很複雜,,預設使用 cdepn 檔案來建立調用圖資訊檔。

即為:genfull -f test.c.cdepn


3. 使用gengraph可以對給定一組函數產生一個小的調用圖 main.ps,顯示函數調用關係。

即為:$ gengraph -f main -g full.graph

    在可視化環境,開啟main.ps即可,當然也可以產生其他格式的圖片,詳見後文
四、執行個體示範 1、寫一個簡單的程式:      2、使用剛剛安裝好的gcc編譯:     

       會產生test.c.cdepn檔案,裡麵包含了產生.graph誶的資訊:

        3、產生full.graph檔案          查看一下full.graph檔案的內容:      4、產生圖形檔案:          這個main.ps即可在可視化環境使用graphviz開啟,見效果圖:          這圖很清楚的反應了函數間的調用關係     產生不同類型的圖形檔案: gengraph --output-type "png" -f main #詳見gengraph --man 五、命令參數詳解     1、genfull         genfull --man #可查看詳細的參數              2、gengraph         gengraph --man #可查看詳細的參數

-f:指定頂級函數,即入口函數,如main等(當然不限定是main了);

-o:指定輸出的postfile檔案名稱,不指定的話就是函數名了,如上面的main;

--output-type:指定輸出類型,例如png、gif、html和ps,預設是ps,如上面的main.ps;

-d:指定最大調用層數;

-s:僅僅顯示指定的函數,而不對其調用進行展開;

-i:忽略指定的函數

-t:忽略Linux特有的核心功能集;

-k:保留由-s忽略的內部細節形成的中間檔案,為sub.graph 六、後記: 1、在安裝完成後,調用gengraph(gengraph -f main -g full.graph)產生ps格式檔案時,會報如下錯誤: Error:<stdin> error: syntax error in line 4 near ';',不知道為什麼,還沒有解決,但是可以產生main.ps,並且main.ps資訊是正確的,見上面的效果圖。 如果使用 gengraph -f main -g full.graph --output-type "png" 則不會報錯…… 2、如果是c++的檔案,使用genfull -g cppdepn test.c.cdepn 產生了full.graph,但是在調用gengraph時,報錯: Error:<stdin> error: syntax error in line 4 near '; Error: <stdin>: syntax error in line 28 near '_Tp' 並且產生不main.ps,
經多次測試發現,報錯與--output-type輸出的格式有關係,有的格式不會報錯,有的會報錯,真心懷疑gengraph存在問題 解決方案還在尋找中…………

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.