June 16, 2006

透過 GCC 作 Call Graph 視覺化輸出

Call Graph 對於理解一個中大型的軟體計畫有很大的助益,以 static analysis 來說,基本上就是做了編譯系統前半段的工作,然後依據特定條件與需求,建立圖形結構,[ncc] 就是這樣的工具,引用其網頁說明如下:
    ncc is a compiler that produces program analysis information. ncc is a decent replacement of cflow and cscope able to analyse any program using the gcc compiler. The program also incliudes a graphical call-graph navigator and source browser which is extremely practical for hacking and comprehending large projects.
如果要進一步以視覺化呈現,可參考 [CodeViz],這個專案很有意思,修改了 GCC 的 cgraph_analyze_function 以輸出額外的資訊,然後再以 Perl 撰寫的程式呼叫 GraphViz 作圖形化。以 GCC 3.4 branch 的 gcc core 為例,可得以下視覺化輸出: (部份)

以上是關於 GCC internal_dfa_insn_code 相關的 Call Graph,程式也允許過濾特定 function,或標注等操作。我試著將 GCC 修改的部份弄成 GCC flag,可取得我的修改 [gcc-3_4-code_graph_generation.patch],開發對象是 GCC 3.4 branch,不過應該 3.4.x 都可適用,該 flag 為 "-fcode-graph-generation",編譯時期加上後,會額外輸出 .cdepn 檔,用以表示 Call Graph。至於 Perl 的部份,我弄了一個 [簡化的版本],因為我不懂 Perl 正規的打包方式,所以用了很笨的方法寫 Makefile。
由 jserv 發表於 June 16, 2006 11:25 PM
迴響

向往一种可以分析文本的类似工具,比如说:以缜密著称的哲学著作,能否经得起类似的分析?也许只有你可以做出来:)

why 發表於 June 17, 2006 10:23 AM
發表迴響









記住我的資訊?