文章目錄
代碼結構圖
源碼分析是程序員離不開的話題,無論是研究開源項目,還是平時做各類移植、開發,都避免不了對源碼的深入解讀.對於一個功能較復雜的函數,想輕易的看懂其函數調用結構比較困難,今天在次介紹一款可以幫助我們查看函數調用關系的工具Callgraph.
使用Callgraph對前面博客中獲取當前工程路徑的代碼進行函數調用分析,分析結果如下圖.

Callgraph安裝
以 Ubuntu 為例,安裝cflow和graphviz
$ sudo apt-get install cflow graphviz
- 1
接下來安裝 tree2dotx 和 Callgraph,這里都默認安裝到 /usr/local/bin。
$ wget -c https://github.com/tinyclub/linux-0.11-lab/raw/master/tools/tree2dotx $ wget -c https://github.com/tinyclub/linux-0.11-lab/raw/master/tools/callgraph $ sudo cp tree2dotx callgraph /usr/local/bin $ sudo chmod +x /usr/local/bin/{tree2dotx,callgraph}
- 1
- 2
- 3
- 4
最后安裝gawk
$ sudo apt-get install gawk
- 1
使用方法簡介
對Desktop下test.cpp文件中的main()函數進行函數調用分析
- 打開一個新的終端,先切換到Desktop路徑下
cd Desktop
- 1
- 然后輸入下述命令
callgraph -f main -d ./test.cpp
- 1
其中-f
對應的參數代表需要分析的函數名,在這里對主函數main()進行分析.
-d
對應的參數代表需要分析的程序地址,在這里對test.cpp進行分析.
- 確定需要分析的函數
輸入2中命令后會出現如下提示,該提示主要詢問你需要檢測test.cpp文件中的哪一個main函數,選取需要分析的main函數前面對應的編號,在這里只有只有一個main函數,因此輸入對應編號1即可

- 輸出結果
輸入對應編號后會自動生成函數調用圖,默認使用Chrome/Chromium瀏覽器打開,生成的函數調用關系圖與文件在同一目錄下,以.svg
結尾.

若沒有安裝Chrome/Chromium瀏覽器,則可以制定使用Ubuntu自帶的firefox瀏覽器打開,需要在第2步中加入-b
指令制定打開工具,如下所示
callgraph -f main -b firefox
- 1
運行結果