使用Graphviz + CodeViz產生C/C++函數調用圖(call graph)

來源:互聯網
上載者:User

一、Graphviz + CodeViz簡單介紹

CodeViz是《Understanding The Linux Virtual Memory Manager》的作者 Mel Gorman 寫的一款分析C/C++原始碼中函數調用關係的open source工具(類似的open source軟體有 egypt、ncc)。其基本原理是給 GCC 打個補丁(如果你的gcc版本不符合它的要求還得先下載正確的gcc版本),讓它在編譯每個源檔案時 dump 出其中函數的 call graph,然後用 Perl 指令碼收集並整理調用關係,轉交給Graphviz繪製圖形(Graphviz屬於後端,CodeViz屬於前端)。

CodeViz 原本是作者用來分析 Linux virtual memory 的源碼時寫的一個小工具,現在已經基本支援 C++ 語言,最新的 1.0.9 版能在 Windows + Cygwin 下順利地編譯使用。

基本介紹就到這兒,如果你對其原理比較感興趣,可以參考這篇文章:分析函數呼叫歷程圖(call graph)的幾種方法

二、Graphviz + CodeViz編譯安裝

1. 安裝 GraphViz調用圖的產生依賴於 GraphViz,所以首先要安裝 GraphViz。可以下載源碼包編譯、安裝(下載首頁:http://www.graphviz.org/Download.php)。

如果是Ubuntu系統可以直接apt安裝: sudo apt-get install graphviz

2. 安裝 CodeViz下載CodeVize源碼包:http://www.csn.ul.ie/~mel/projects/codeviz/

解壓:tar xvf codeviz-1.0.12.tar.gz (目前最新版是1.0.12)

進入解壓後的目錄:cd codeviz-1.0.12/

CodeViz 使用了一個 patch 版本的 GCC 編譯器,而且不同的 CodeViz 版本使用的GCC 版本也不同,可以下載 CodeViz 的源碼包後查看 Makefile 檔案來確定要使用的 GCC 版

本,codeviz-1.0.12 使用 GCC-4.6.2。實際上安裝 CodeViz 時安裝指令碼make會檢查當前的GCC版本如果不符合則會自動下載對應的 GCC並打 patch,但由於GCC較大如果網速不好且在虛擬機器中的話容易下載失敗或系統錯誤什麼的,因此這裡我們還是分步安裝比較好,先安裝gcc再回來安裝CodeViz。

(1)安裝 GCC

下載gcc-4.6.2.tar.gz到 cd codeviz-1.0.12目錄下的compilers裡。

下載地址:ftp://ftp.gnu.org/pub/gnu/gcc/gcc-4.6.2/gcc-4.6.2.tar.gz

CodeViz 的安裝指令碼 compilers/install_gcc-4.6.2.sh 會自動檢測 compilers 目錄下是否有 gcc 的源碼包,若沒有則自動下載並打 patch。這裡前面已經下載,直接移到該目錄即可,則剩下的就是解壓安裝了。install_gcc-3.4.6.sh 會解壓縮 gcc打 patch,並將其安裝到指定目錄,若是沒有指定目錄,則預設使用$HOME/gcc-graph,通常指定安裝在/usr/

local/gcc-graph(這時需要 root 許可權)。

安裝: ./install_gcc-4.6.2.sh

注意:這裡可能安裝時有些錯誤,具體錯誤及解決方案見後面。

(2)安裝 CodeViz

./configure && make install-codeviz

注1:不需要 make ,因為make的作用就是檢測是否有gcc若沒有則下載源碼包,所以這裡只要安裝 codeviz 即可。具體查看 Makefile 檔案。

注意:這裡為什麼不是通常用的make install,因為這裡make install的作用是先安裝gcc再安裝codeviz,而前面已經安裝了 gcc,所以這裡只需要安裝 codeviz ,即make install-codeviz指令碼,該指令碼也就是將genfull 和 gengraph 複製到/usr/local/bin 目錄下。

目前為止,CodeViz 安裝完成了。

相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

11.11 Big Sale for Cloud

Get Unbeatable Offers with up to 90% Off,Oct.24-Nov.13 (UTC+8)

Get It Now >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

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

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