2016年4月10日 星期日

Linux下使用 doxygen工具幫助快速解析source code

               
最近拿到新的開發板,需要去study各個Modules以便日後進行移植,這免不了要去trace kernel driverkernel source實在多如牛毛(據說已超過千萬行),所以我就在找有沒有什麼工具可以使用doxygen以前雖然有聽過但從沒想過去使用以前我找code的方式通常都是直接grep + find (假裝牛B),或者靠IDE現在用了doxygen才發現原來這麼方便 。


doxygen有幾個特色:

1. 生成的document可以是線上Html格式,或者本機端的latex格式

2. 可以匯出指定的source code路徑的檔案階層。

3. 可以建立關系圖,例如各個function的呼叫路徑(call path),或者像是UML中的
    類別繼承和協作圖。

使用方式如下:

step 1 : 下載套件
    - sudo apt-get install doxygen doxygen-doc doxygen-gui graphviz graphviz-doc

               doxygen-gui : doxygen的GUI版本。
               graphviz :
                     用來生成各部件之間的關係圖工具,例如網路拓蹼、軟體架構等。
                     請參考 http://www.openfoundry.org/tw/foss-programs/8820-graphviz-

step 2 : 產生一個config組態檔,檔名可以隨便取。
    - doxygen -g MyDoxygen.config

step 3 : 設定config組態檔
    需要將組態檔的設定由NO改為YES,才會打開相應的功能,對我來說我想看
    是function的呼叫路徑,所以以下是我的設定。

EXTRACT_ALL = YES
EXTRACT_PRIVATE = YES
EXTRACT_PACKAGE = YES
EXTRACT_STATIC = YES
/*source路徑 ,不寫的話預設是當前目錄*/
INPUT = /home/jinyo/My_source
/*包含子資料目錄*/
RECURSIVE = YES
INLINE_SOURCES = YES
/*開啟Graphviz的 dot tool*/
HAVE_DOT = YES
/*產生function的呼叫與被呼叫路徑*/
CALL_GRAPH = YES
CALLER_GRAPH = YES


step 4 : 執行Cmd , 開始生成 --> doxygen MyDoxygen.config


結果如下:

1. 生成HTML格式和latex格式,但我都直接看HTML的,latex不會用。

2. 列出資料結構 ,例如:class ,struct , enum等。


3. 列出某個function所有的呼叫路徑,或者被呼叫的路徑。