Ubuntu1804 源碼閱讀神器,egypt+graphviz 圖形化顯示函數調用關係(超詳細+圖文並茂)

函數調用圖可以讓我們更加直觀地瞭解到源碼函數直接的調用和層次關係,提高閱讀源碼的效率,工欲善其事,必先利其器;

1 前言

看源碼的時候,心血來潮想弄一下函數之前的調用關係,想起以前doxygen配合graphviz使用可以生成比較直觀的函數調用關係圖,但是前提是函數的註釋需要嚴格按照doxygen的規範,具體可以自己去搜索一下,當然使用source insight等利器也很方便;本文主要通過gcc+egypt+graphviz(dot)三個工具輕鬆生成源碼的函數調用關係圖;下圖是本人在閱讀FreeRTOS源碼tasks.c時生成的調用關係圖,具體如下所示;

在這裏插入圖片描述

2 graphviz 安裝

Graphviz (Graph Visualization Software的縮寫)是一個由AT&T實驗室啓動的開源工具包,用於繪製DOT語言腳本描述的圖形。
ubuntu下可以直接安裝;

sudo apt-get install graphviz

在這裏插入圖片描述成功安裝graphviz,這裏我們就可以使用dot工具了,具體使用方法如下;

在這裏插入圖片描述

3 egypt 安裝

egypt官網: http://www.gson.org/egypt/
在這裏插入圖片描述下載後的文件爲egypt-1.10.tar.gz;找到文件所在路徑;

sudo find \ -name egypt-1.10.tar.gz

然後解壓:

sudo tar -xvf egypt-1.10.tar.gz

解壓得到egypt-1.10;

cd egypt-1.10 && sduo chmod +x egypt

最終可以看到文件結構如下;
在這裏插入圖片描述
egypt移動到/usr/bin,方便後面直接調用,或者將當前egypt所在路徑添加到環境變量中;

sudo cp egypt /usr/bin

以上,已經完成了egypt的安裝;

使用方法如下;

 egypt [--omit function,function,...] [--include-external] <rtl-file>... | dotty -
 egypt [--omit function,function,...] [--include-external] <rtl-file>... | dot <dot-options>

4 測試

編寫程序test.c,具體如下所示;

#include <stdio.h>

void test0();
void test1();
void test2();
void test3();

int main()
{
        test1();
        test2();
        test3();
        return 0;
}

void test0(void){
        printf("hello");
}

void test1(void)
{
        test0();
}
 
void test2(void)
{
        test1();
}
 
void test3(void)
{
        
}

編譯需要加上參數-fdump-rtl-expand生成相應的dump文件;

gcc -fdump-rtl-expand -c test.c

在這裏插入圖片描述這裏有我們需要的文件test.c.229r.expand;
輸入如下指令;

egypt test.c.229r.expand | dot -T png -o test.png

最終生成了順利生成test.png,具體如下圖所示;

在這裏插入圖片描述

5 結論

對C語言源碼的閱讀用這個辦法還是有點小麻煩,無法一鍵生成調用關係,另外還需要gcc編譯源碼生成dumpfile文件,如果想要方便一些,可能還需要自己寫腳本實現自動化,本人能力有限,如果大佬有更好的辦法,歡迎留言告知;

筆者能力和水平有限,文中難免有錯誤和紕漏之處,請大佬們不吝賜教;
創作不易,如果本文幫到了您;
如果本文幫到了您,請幫忙點個贊 👍👍👍;
如果本文幫到了您,請幫忙點個贊 👍👍👍;
如果本文幫到了您,請幫忙點個贊 👍👍👍;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章