我發現函數調用圖可以讓我們更加直觀地了解到源碼函數直接的調用和層次關系,提高閱讀源碼的效率。
1 前言
看源碼的時候,心血來潮想弄一下函數之前的調用關系,想起以前doxygen配合graphviz使用可以生成比較直觀的函數調用關系圖,但是前提是函數的注釋需要嚴格按照doxygen的規范,具體可以自己去搜索一下,當然使用source insight等利器也很方便;
本文主要通過gcc+egypt+graphviz(dot)三個工具輕松生成源碼的函數調用關系圖;下圖是本人在閱讀FreeRTOS源碼tasks.c時生成的調用關系圖,具體如下所示;
一個例子
2 graphviz 安裝
Graphviz (Graph Visualization Software的縮寫)是一個由AT&T實驗室啟動的開源工具包,用于繪制DOT語言腳本描述的圖形。ubuntu下可以直接安裝;
sudoapt-getinstallgraphviz
直接輸入指令后,系統開始安裝;
成功安裝graphviz,這里我們就可以使用dot工具了,具體使用方法如下;
3 egypt 安裝
egypt官網: http://www.gson.org/egypt/
簡潔的首頁
下載后的文件為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
最終可以看到文件結構如下;
將egypt移動到/usr/bin,方便后面直接調用,或者將當前egypt所在路徑添加到環境變量中;
sudocpegypt/usr/bin
以上,已經完成了egypt的安裝;
使用方法如下;
egypt[--omitfunction,function,...][--include-external]...|dotty- egypt[--omitfunction,function,...][--include-external] ...|dot
4 測試
編寫程序test.c,具體如下所示;
#includevoidtest0(); voidtest1(); voidtest2(); voidtest3(); intmain() { test1(); test2(); test3(); return0; } voidtest0(void){ printf("hello"); } voidtest1(void) { test0(); } voidtest2(void) { test1(); } voidtest3(void) { }
編譯需要加上參數-fdump-rtl-expand生成相應的dump文件;
gcc-fdump-rtl-expand-ctest.c
這里有我們需要的文件test.c.229r.expand;
輸入如下指令;
egypttest.c.229r.expand|dot-Tpng-otest.png
最終生成了順利生成test.png,具體如下圖所示;
最終調用關系圖
5 結論
對C語言源碼的閱讀用這個辦法還是有點小麻煩,無法一鍵生成調用關系,,
另外還需要gcc編譯源碼生成dumpfile文件,如果想要方便一些,可能還需要自己寫腳本實現自動化,如果大佬有更好的辦法,歡迎留言區討論。
原文標題:一個超級實用的源碼閱讀小技巧
文章出處:【微信公眾號:FPGA之家】歡迎添加關注!文章轉載請注明出處。
-
C語言
+關注
關注
180文章
7614瀏覽量
137725 -
源碼
+關注
關注
8文章
652瀏覽量
29457 -
函數
+關注
關注
3文章
4346瀏覽量
62977
原文標題:一個超級實用的源碼閱讀小技巧
文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
焊接技術如何提高生產效率
如何提高SMT生產效率
Dali通信如何提高能源效率
SOLIDWORKS 2025提高數據效率
![SOLIDWORKS 2025<b class='flag-5'>提高</b>數據<b class='flag-5'>效率</b>](https://file1.elecfans.com/web3/M00/05/22/wKgZO2d8zl6AeMkGAAGkJpK8WW0567.png)
怎樣提高三坐標測量機的測量效率
如何提高poe供電效率
如何提高CNC加工效率
如何提高伺服驅動器的效率
MES系統如何提高生產效率
如何提高云計算的性能和效率
東莞mes系統:提高生產效率的利器
深圳MES系統如何提高生產效率
提高效率的DC電源模塊設計技巧
![<b class='flag-5'>提高效率</b>的DC電源模塊設計技巧](https://file1.elecfans.com/web2/M00/C0/B9/wKgZomXYLdyAcwewAAHXir4VCZw058.png)
評論