国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

分享一個超級實用的源碼閱讀小技巧

FPGA之家 ? 來源:小麥大叔 ? 作者:小麥大叔 ? 2021-05-29 11:50 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

工欲善其事必先利其器;

我發現函數調用圖可以讓我們更加直觀地了解到源碼函數直接的調用和層次關系,提高閱讀源碼的效率 。

1 前言

看源碼的時候,心血來潮想弄一下函數之前的調用關系,想起以前doxygen配合graphviz使用可以生成比較直觀的函數調用關系圖,但是前提是函數的注釋需要嚴格按照doxygen的規范,具體可以自己去搜索一下,當然使用source insight等利器也很方便;

本文主要通過gcc+egypt+graphviz(dot)三個工具輕松生成源碼的函數調用關系圖;下圖是本人在閱讀FreeRTOS源碼tasks.c時生成的調用關系圖,具體如下所示;

43fc1100-bfcf-11eb-9e57-12bb97331649.png

一個例子

2 graphviz 安裝

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

sudo apt-get install graphviz

直接輸入指令后,系統開始安裝;

4412a564-bfcf-11eb-9e57-12bb97331649.png

成功安裝graphviz,這里我們就可以使用dot工具了,具體使用方法如下;

4438cd5c-bfcf-11eb-9e57-12bb97331649.png

3 egypt 安裝

egypt官網: http://www.gson.org/egypt/

446a9030-bfcf-11eb-9e57-12bb97331649.png

簡潔的首頁

下載后的文件為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

最終可以看到文件結構如下;

44bf782a-bfcf-11eb-9e57-12bb97331649.png

將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

44eb97de-bfcf-11eb-9e57-12bb97331649.png

這里有我們需要的文件test.c.229r.expand;

輸入如下指令;

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

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

44f4efa0-bfcf-11eb-9e57-12bb97331649.png

最終調用關系圖

5 結論

C語言源碼的閱讀用這個辦法還是有點小麻煩,無法一鍵生成調用關系,,

另外還需要gcc編譯源碼生成dumpfile文件,如果想要方便一些,可能還需要自己寫腳本實現自動化,如果大佬有更好的辦法,歡迎留言區討論。

編輯:jq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • C語言
    +關注

    關注

    183

    文章

    7644

    瀏覽量

    145569
  • GCC
    GCC
    +關注

    關注

    0

    文章

    112

    瀏覽量

    26247
  • 源碼
    +關注

    關注

    8

    文章

    685

    瀏覽量

    31317
  • 函數
    +關注

    關注

    3

    文章

    4417

    瀏覽量

    67499

原文標題:一個超級實用的源碼閱讀小技巧

文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    超級電容怎么測多少f

    超級電容器的應用中,漏電流是至關重要的參數,它直接影響電容器的性能和壽命。你知道嗎?
    的頭像 發表于 02-05 09:27 ?180次閱讀
    <b class='flag-5'>超級</b>電容怎么測多少f

    醫院隨訪管理系統源碼,三級隨訪系統源碼,Java+Springboot,Vue,Ant-Design+MySQL5

    :MySQL5及以上 隨訪系統菜單功能介紹: 1.首頁 首頁分區域展示隨訪概覽,表單占比, 科室占比以及Top榜單數四模塊 2.醫護隨訪系統 該模塊主要包括級隨訪,二級隨
    的頭像 發表于 11-08 14:48 ?515次閱讀
    醫院隨訪管理系統<b class='flag-5'>源碼</b>,三級隨訪系統<b class='flag-5'>源碼</b>,Java+Springboot,Vue,Ant-Design+MySQL5

    【高速數字設計(基礎篇)】閱讀體驗之--書籍排版設計和目錄架構及初步閱讀

    書籍排版設計首先感謝電子發燒友舉辦這個試讀活動,使得本人有幸能夠得到【高速數字設計(基礎篇)】的試讀機會。對于到手的書籍、雜志、報紙之類的紙質閱讀物,我向有習慣就是聞聞紙張的味道
    發表于 11-06 22:49

    【「高速數字設計(基礎篇)」閱讀體驗】+初步上手閱讀

    區域,就造成了失真。講解的非常簡單,容易接收。也對信號完整性有了初步的了解。 這是第張的閱讀,后面會閱讀后續章節。
    發表于 10-21 20:50

    6超級電容能存多少電

    超級電容憑借法拉級電容、高充放電效率和長循環壽命,成為新型儲能器件,突破傳統電容器局限,應用于能源存儲與高效動力系統。
    的頭像 發表于 10-20 09:18 ?705次閱讀
    6<b class='flag-5'>個</b><b class='flag-5'>超級</b>電容能存多少電

    智能小車設計源碼和圖紙資料

    智能小車設計源碼和圖紙
    發表于 08-25 15:38 ?1次下載

    絕了!耐達訊自動化EtherCAT轉RS232盤活RFID閱讀

    。EtherCAT是工業以太網協議界的“速度擔當”,實時性強、數據傳輸快;RS232是串行通信老大哥,穩定性流;RFID閱讀器則是識別標簽信息的“火眼金睛”。但EtherCAT和RS232就像兩列軌道
    發表于 07-23 15:34

    科技云報到:企業級AI超級應用,下一個關鍵籌碼?

    超級應用生態正在形成
    的頭像 發表于 07-15 22:51 ?343次閱讀

    【「Yocto項目實戰教程:高效定制嵌入式Linux系統」閱讀體驗】01初讀體驗

    代碼都混在起的操作就是坑,導致了第三方內核源碼過大,甚至找找不到能像看單片機代碼那樣快速跳轉的工具來閱讀linux源碼,但實際使用的
    發表于 06-30 21:49

    【「零基礎開發AI Agent」閱讀體驗】操作實戰,開發編程助手智能體

    . 首先要理解智能體的相關概念 ,比如角色,限定,技能:包括插件等,知識:包括知識庫,文檔等等. 創建步驟: 二.創建智能體: 預覽和調試 智能體發布: 最后是使用智能體: 1.從coze
    發表于 05-27 11:16

    什么是超級電容?你對超級電容了解多少?

    什么是超級電容?你對超級電容了解多少?1、雙電層電容:是在電極/溶液界面通過電子或離子的定向排列造成電荷的對峙而產生的。對電極/溶液體系,會在電子導電的電極和離子導電的電解質溶液界
    的頭像 發表于 05-16 08:52 ?1221次閱讀
    什么是<b class='flag-5'>超級</b>電容?你對<b class='flag-5'>超級</b>電容了解多少?

    超級電容和鋰電池有什么區別,超級電容有哪些優勢?

    超級電容和鋰電池有什么區別,超級電容有哪些優勢?、什么是超級電容?超級電容超級電容
    的頭像 發表于 05-16 08:51 ?1912次閱讀
    <b class='flag-5'>超級</b>電容和鋰電池有什么區別,<b class='flag-5'>超級</b>電容有哪些優勢?

    為什么選擇超級電容?優勢有哪些?

    為什么選擇超級電容?優勢有哪些?為什么選擇超級電容,就不得不仔細說說它的優勢了。超級電容作為種新型電化學儲能裝置,與傳統電容和鋰電池相比,超級
    的頭像 發表于 05-16 08:47 ?2254次閱讀
    為什么選擇<b class='flag-5'>超級</b>電容?優勢有哪些?

    超級電容器均壓電路狀況與展望

    電壓均壓電路的基本原理是比較相鄰的兩超級電容器的電壓是否致,如果不同電路動作,將電壓相對高的超級電容器旁路部分電流降低充電電壓升高的速率,使兩
    發表于 03-24 15:13

    在下載的源碼進入bsp目錄下的板子中執行menuconfig報錯,怎么解決?

    在下載的源碼進入bsp目錄下的板子中執行menuconfig報錯,如下: Kconfig:3:warning: ignoring unsupported character
    發表于 03-07 06:35