首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

使用 Graphviz + CodeViz 產生 C/C++ 函式呼叫圖

     編輯:關於C++

工具簡介

  • Graphviz:圖形繪製後端(dot 指令)。
  • CodeViz:GCC patch 前端,編譯時產生 .cdepn 呼叫關係檔,Perl 腳本整理後餵給 Graphviz。

安裝步驟

  1. 安裝 Graphviz(apt-get install graphviz 或官網下載)。
  2. 下載 CodeViz 原始碼,需對應版本 GCC(如 1.0.12 需 GCC 4.6.2)。
  3. 編譯安裝 GCC(可用 contrib/download_prerequisites 自動抓 GMP/MPFR/MPC)。
  4. ./configure && make install-codeviz 安裝 genfull, gengraph 至 /usr/local/bin。

使用流程

# 1. 用 CodeViz GCC 編譯專案(僅 -c)
~/gcc-graph/bin/gcc -c *.c

# 2. 產生完整呼叫圖資訊
genfull

# 3. 針對特定函式產生圖形
gengraph --output-type png -f main -d 2 -s "OSInit" -i "OSCPUSaveSR;OSCPURestoreSR"

常用 gengraph 參數

  • -f:根函式(入口)。
  • -d:最大深度。
  • -s:摺疊指定函式(不展開內部)。
  • -i:忽略指定函式。
  • -r:反向(顯示呼叫者)。
  • -k:保留中間 sub.graph 供手動調整。
  • --output-type:png, gif, ps, html 等。

進階:Daemon/Client 模式

大型專案可啟動 genfull -daemon 背景服務,gengraph 透過 socket 查詢,避免重複解析 full.graph。

安裝常見錯誤與解決

  • GCC 需 GMP/MPFR/MPC:用 download_prerequisites 腳本自動處理。
  • m4 缺失:apt-get install m4。
  • bits/predefs.h 找不到:設定 C_INCLUDE_PATH。
  • crti.o 找不到:設定 LIBRARY_PATH。
  • unwind-dw2.c 編譯錯誤:註解 MD_FALLBACK_FRAME_STATE_FOR 相關程式碼(GCC 4.6.2 已知 Bug)。
  • 軟連結層級過多:使用絕對路徑建立 symlink。

實戰範例

分析 uC/OS-II 範例專案,從 main 逐步摺疊/忽略函式,最終產生清晰呼叫圖,輔助程式碼閱讀與重構。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved