2017年6月11日 星期日

產生C語言Call Graph的方法

測試了多個c語言的call-graph產生器,覺得最好用的還是cflow這個指令,
配合htags,能產生超強大的html來瀏覽source code
以下將說明指令使用方式

安裝相關套件:
yum install cflow global


cflow使用方式:
首先先切換到專案底下:
cd myproject;

目錄的結構大約如下,source code分別放在src及lib資料夾
myproject
+--src
+--a.c
+--b.c
+--lib
+--cqji.c
假設我的程式碼分別放在src及lib目錄下,我希望產生所有c檔的call-graph,
cflow src/*.c lib/*.c;

執行後輸出:
main() <int main (int argc, char *argv[]) at src/main.c:319>:
    getopt()
    print_usage() <void print_usage (const char *pro_name) at src/main.c:40>:
        printf()
    time()
    printf()
    ctime()
    packet_queue_init() <BOOL packet_queue_init (void) at src/packet_queue.c:22>:
        pthread_mutex_init()
    flow_init() <int flow_init (void) at src/flow.c:175>:
        flow_hash_init() <int flow_hash_init (void) at src/hash_table.c:30>:
            MALLOC()
            pthread_mutex_init()
        flow_queue_init() <int flow_queue_init (void) at src/flow_queue.c:27>:
            pthread_mutex_init()
    pthread_create()

可以加上-T選項,產生如下
+-main() <int main (int argc, char *argv[]) at src/main.c:319>
  +-getopt()
  +-print_usage() <void print_usage (const char *pro_name) at src/main.c:40>
  | \-printf()
  +-time()
  +-printf()
  +-ctime()
  +-packet_queue_init() <BOOL packet_queue_init (void) at src/packet_queue.c:22>
  | \-pthread_mutex_init()
  +-flow_init() <int flow_init (void) at src/flow.c:175>
  | +-flow_hash_init() <int flow_hash_init (void) at src/hash_table.c:30>
  | | +-MALLOC()
  | | \-pthread_mutex_init()
  | \-flow_queue_init() <int flow_queue_init (void) at src/flow_queue.c:27>
  |   \-pthread_mutex_init()
  +-pthread_create()

配合htags指令,可以產生一個超強大的html
cflow src/*.c -o cflow.txt -f posix
htags -ngoIsv --cflow cflow.txt





沒有留言:

張貼留言