2016年1月28日 星期四

純 C 語言專案的 call graph 產生方式

參考 分析函數調用關系圖(call graph)的幾種方法 可以有個概念,目前傾向於使用 gnu cflow ,因為得到的是文字檔,既可直接進行文字註解,也可以產生圖檔,較富有彈性。安裝及使用可參考 Call Graph for C - cflow 。更詳細的說明可參考 好用的 Trace 工具 cflow 。當然,如果只有做到這樣,那 emacs 就沒有什麼好拿來說嘴的了;請安裝 cflow-mode ,直接在 call graph 中進行原始碼跳轉。直接在 emacs 中產生 cflow 的 call graph ,也只要寫個腳本就好了。

emacs的cflow-mode的快速鍵有這些:
key             binding
---             -------

TAB cflow-hide-or-show-subtree
SPC cflow-scroll-other-window
1 delete-other-windows
? cflow-get-stack
E cflow-edit-out-full
R cflow-recursion-next
b cflow-backward-same-level
d cflow-display-function-other-window
f cflow-forward-same-level
n cflow-next-line
o cflow-find-function-other-window
p cflow-previous-line
r cflow-recursion-root
s cflow-find-function
u cflow-up-level
x cflow-goto-expand
DEL cflow-scroll-other-window-down

以 emacs 24.5 的原始碼來說, call graph 是非常巨大的,建議一定要加上 -b 參數; reverse graph 的話,一樣很巨大,除了加上 -b 參數這條路之外,-d 2 也是一個選項,不過減少的檔案大小大概只有25%左右,但少了一堆資訊,看各人的需求囉~~


P.S.為了在源碼間跳轉的話,可以使用 cscope ,參考2013年的拙作: ubuntu上為emacs安裝cscope以進行code navigation

沒有留言:

張貼留言