我發(fā)現(xiàn)函數(shù)調(diào)用圖可以讓我們更加直觀地了解到源碼函數(shù)直接的調(diào)用和層次關(guān)系,提高閱讀源碼的效率。
1 前言
看源碼的時(shí)候,心血來(lái)潮想弄一下函數(shù)之前的調(diào)用關(guān)系,想起以前doxygen配合graphviz使用可以生成比較直觀的函數(shù)調(diào)用關(guān)系圖,但是前提是函數(shù)的注釋需要嚴(yán)格按照doxygen的規(guī)范,具體可以自己去搜索一下,當(dāng)然使用source insight等利器也很方便;
本文主要通過(guò)gcc+egypt+graphviz(dot)三個(gè)工具輕松生成源碼的函數(shù)調(diào)用關(guān)系圖;下圖是本人在閱讀FreeRTOS源碼tasks.c時(shí)生成的調(diào)用關(guān)系圖,具體如下所示;
一個(gè)例子
2 graphviz 安裝
Graphviz (Graph Visualization Software的縮寫)是一個(gè)由AT&T實(shí)驗(yàn)室啟動(dòng)的開(kāi)源工具包,用于繪制DOT語(yǔ)言腳本描述的圖形。ubuntu下可以直接安裝;
sudoapt-getinstallgraphviz
直接輸入指令后,系統(tǒng)開(kāi)始安裝;
成功安裝graphviz,這里我們就可以使用dot工具了,具體使用方法如下;
3 egypt 安裝
egypt官網(wǎng): http://www.gson.org/egypt/
簡(jiǎn)潔的首頁(yè)
下載后的文件為egypt-1.10.tar.gz;找到文件所在路徑;
sudofind-nameegypt-1.10.tar.gz
然后解壓:
sudotar-xvfegypt-1.10.tar.gz
解壓得到egypt-1.10;
cdegypt-1.10&&sduochmod+xegypt
最終可以看到文件結(jié)構(gòu)如下;
將egypt移動(dòng)到/usr/bin,方便后面直接調(diào)用,或者將當(dāng)前egypt所在路徑添加到環(huán)境變量中;
sudocpegypt/usr/bin
以上,已經(jīng)完成了egypt的安裝;
使用方法如下;
egypt[--omitfunction,function,...][--include-external]...|dotty- egypt[--omitfunction,function,...][--include-external] ...|dot
4 測(cè)試
編寫程序test.c,具體如下所示;
#includevoidtest0(); voidtest1(); voidtest2(); voidtest3(); intmain() { test1(); test2(); test3(); return0; } voidtest0(void){ printf("hello"); } voidtest1(void) { test0(); } voidtest2(void) { test1(); } voidtest3(void) { }
編譯需要加上參數(shù)-fdump-rtl-expand生成相應(yīng)的dump文件;
gcc-fdump-rtl-expand-ctest.c
這里有我們需要的文件test.c.229r.expand;
輸入如下指令;
egypttest.c.229r.expand|dot-Tpng-otest.png
最終生成了順利生成test.png,具體如下圖所示;
最終調(diào)用關(guān)系圖
5 結(jié)論
對(duì)C語(yǔ)言源碼的閱讀用這個(gè)辦法還是有點(diǎn)小麻煩,無(wú)法一鍵生成調(diào)用關(guān)系,,
另外還需要gcc編譯源碼生成dumpfile文件,如果想要方便一些,可能還需要自己寫腳本實(shí)現(xiàn)自動(dòng)化,如果大佬有更好的辦法,歡迎留言區(qū)討論。
原文標(biāo)題:一個(gè)超級(jí)實(shí)用的源碼閱讀小技巧
文章出處:【微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
-
C語(yǔ)言
+關(guān)注
關(guān)注
180文章
7632瀏覽量
141802 -
源碼
+關(guān)注
關(guān)注
8文章
671瀏覽量
30349 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4381瀏覽量
64907
原文標(biāo)題:一個(gè)超級(jí)實(shí)用的源碼閱讀小技巧
文章出處:【微信號(hào):zhuyandz,微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
RFID智能書柜:閱讀新時(shí)代的智慧引擎

焊接技術(shù)如何提高生產(chǎn)效率
如何提高SMT生產(chǎn)效率
Dali通信如何提高能源效率
SOLIDWORKS 2025提高數(shù)據(jù)效率

怎樣提高三坐標(biāo)測(cè)量機(jī)的測(cè)量效率
如何提高poe供電效率
如何提高CNC加工效率
如何提高伺服驅(qū)動(dòng)器的效率
MES系統(tǒng)如何提高生產(chǎn)效率
如何提高云計(jì)算的性能和效率
預(yù)測(cè)性柵極驅(qū)動(dòng)提高轉(zhuǎn)換器效率

提高LLC轉(zhuǎn)換器的ZVS和效率

通過(guò)布局提高DC-DC轉(zhuǎn)換的效率

提高高開(kāi)關(guān)頻率下更高負(fù)載的效率應(yīng)用報(bào)告

評(píng)論