91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

分享一個(gè)超級(jí)實(shí)用的源碼閱讀小技巧

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

掃碼添加小助手

加入工程師交流群

工欲善其事必先利其器;

我發(fā)現(xiàn)函數(shù)調(diào)用圖可以讓我們更加直觀地了解到源碼函數(shù)直接的調(diào)用和層次關(guān)系,提高閱讀源碼的效率 。

1 前言

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

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

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

一個(gè)例子

2 graphviz 安裝

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

sudo apt-get install graphviz

直接輸入指令后,系統(tǒng)開始安裝;

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

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

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

3 egypt 安裝

egypt官網(wǎng): 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

最終可以看到文件結(jié)構(gòu)如下;

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

將egypt移動(dòng)到/usr/bin,方便后面直接調(diào)用,或者將當(dāng)前egypt所在路徑添加到環(huán)境變量中;

sudo cp egypt /usr/bin

以上,已經(jīng)完成了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)

{

}

編譯需要加上參數(shù)-fdump-rtl-expand生成相應(yīng)的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

最終調(diào)用關(guān)系圖

5 結(jié)論

對(duì)C語言源碼的閱讀用這個(gè)辦法還是有點(diǎn)小麻煩,無法一鍵生成調(diào)用關(guān)系,,

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

編輯:jq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • C語言
    +關(guān)注

    關(guān)注

    183

    文章

    7644

    瀏覽量

    145603
  • GCC
    GCC
    +關(guān)注

    關(guān)注

    0

    文章

    112

    瀏覽量

    26256
  • 源碼
    +關(guān)注

    關(guān)注

    8

    文章

    685

    瀏覽量

    31322
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4417

    瀏覽量

    67517

原文標(biāo)題:一個(gè)超級(jí)實(shí)用的源碼閱讀小技巧

文章出處:【微信號(hào):zhuyandz,微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    超級(jí)電容怎么測多少f

    超級(jí)電容器的應(yīng)用中,漏電流是個(gè)至關(guān)重要的參數(shù),它直接影響電容器的性能和壽命。你知道嗎?
    的頭像 發(fā)表于 02-05 09:27 ?188次閱讀
    <b class='flag-5'>超級(jí)</b>電容怎么測多少f

    醫(yī)院隨訪管理系統(tǒng)源碼,三級(jí)隨訪系統(tǒng)源碼,Java+Springboot,Vue,Ant-Design+MySQL5

    :MySQL5及以上 隨訪系統(tǒng)菜單功能介紹: 1.首頁 首頁分區(qū)域展示隨訪概覽,表單占比, 科室占比以及Top榜單數(shù)四個(gè)模塊 2.醫(yī)護(hù)隨訪系統(tǒng) 該模塊主要包括級(jí)隨訪,二級(jí)隨
    的頭像 發(fā)表于 11-08 14:48 ?528次閱讀
    醫(yī)院隨訪管理系統(tǒng)<b class='flag-5'>源碼</b>,三級(jí)隨訪系統(tǒng)<b class='flag-5'>源碼</b>,Java+Springboot,Vue,Ant-Design+MySQL5

    【高速數(shù)字設(shè)計(jì)(基礎(chǔ)篇)】閱讀體驗(yàn)之--書籍排版設(shè)計(jì)和目錄架構(gòu)及初步閱讀

    書籍排版設(shè)計(jì)首先感謝電子發(fā)燒友舉辦這個(gè)試讀活動(dòng),使得本人有幸能夠得到【高速數(shù)字設(shè)計(jì)(基礎(chǔ)篇)】的試讀機(jī)會(huì)。對(duì)于到手的書籍、雜志、報(bào)紙之類的紙質(zhì)閱讀物,我向有個(gè)習(xí)慣就是聞聞紙張的味道
    發(fā)表于 11-06 22:49

    【「高速數(shù)字設(shè)計(jì)(基礎(chǔ)篇)」閱讀體驗(yàn)】+初步上手閱讀

    區(qū)域,就造成了失真。講解的非常簡單,容易接收。也對(duì)信號(hào)完整性有了個(gè)初步的了解。 這是第張的閱讀,后面會(huì)閱讀后續(xù)章節(jié)。
    發(fā)表于 10-21 20:50

    6個(gè)超級(jí)電容能存多少電

    超級(jí)電容憑借法拉級(jí)電容、高充放電效率和長循環(huán)壽命,成為新型儲(chǔ)能器件,突破傳統(tǒng)電容器局限,應(yīng)用于能源存儲(chǔ)與高效動(dòng)力系統(tǒng)。
    的頭像 發(fā)表于 10-20 09:18 ?714次閱讀
    6<b class='flag-5'>個(gè)</b><b class='flag-5'>超級(jí)</b>電容能存多少電

    超級(jí)精靈再進(jìn)化 smart發(fā)布EHD超級(jí)電混技術(shù):每程,比增程更成

    8月29日,smart超級(jí)精靈日在成都車展首日舉辦,正式發(fā)布EHD超級(jí)電混技術(shù),確立純電+插混雙技術(shù)路線并行戰(zhàn)略,進(jìn)入品牌2.0時(shí)代。 smart EHD超級(jí)電混,源自最新代雷神電混
    的頭像 發(fā)表于 09-02 15:30 ?730次閱讀
    <b class='flag-5'>超級(jí)</b>精靈再進(jìn)化 smart發(fā)布EHD<b class='flag-5'>超級(jí)</b>電混技術(shù):每<b class='flag-5'>一</b>程,比增程更成

    智能小車設(shè)計(jì)源碼和圖紙資料

    智能小車設(shè)計(jì)源碼和圖紙
    發(fā)表于 08-25 15:38 ?1次下載

    絕了!耐達(dá)訊自動(dòng)化EtherCAT轉(zhuǎn)RS232盤活RFID閱讀

    。EtherCAT是工業(yè)以太網(wǎng)協(xié)議界的“速度擔(dān)當(dāng)”,實(shí)時(shí)性強(qiáng)、數(shù)據(jù)傳輸快;RS232是串行通信老大哥,穩(wěn)定性流;RFID閱讀器則是識(shí)別標(biāo)簽信息的“火眼金睛”。但EtherCAT和RS232就像兩列軌道
    發(fā)表于 07-23 15:34

    科技云報(bào)到:企業(yè)級(jí)AI超級(jí)應(yīng)用,下一個(gè)關(guān)鍵籌碼?

    超級(jí)應(yīng)用生態(tài)正在形成
    的頭像 發(fā)表于 07-15 22:51 ?347次閱讀

    【「Yocto項(xiàng)目實(shí)戰(zhàn)教程:高效定制嵌入式Linux系統(tǒng)」閱讀體驗(yàn)】01初讀體驗(yàn)

    代碼都混在起的操作就是個(gè)坑,導(dǎo)致了第三方內(nèi)核源碼過大,甚至找找不到能像看單片機(jī)代碼那樣快速跳轉(zhuǎn)的工具來閱讀linux源碼,但實(shí)際使用的
    發(fā)表于 06-30 21:49

    【「零基礎(chǔ)開發(fā)AI Agent」閱讀體驗(yàn)】操作實(shí)戰(zhàn),開發(fā)個(gè)編程助手智能體

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

    什么是超級(jí)電容?你對(duì)超級(jí)電容了解多少?

    什么是超級(jí)電容?你對(duì)超級(jí)電容了解多少?1、雙電層電容:是在電極/溶液界面通過電子或離子的定向排列造成電荷的對(duì)峙而產(chǎn)生的。對(duì)個(gè)電極/溶液體系,會(huì)在電子導(dǎo)電的電極和離子導(dǎo)電的電解質(zhì)溶液界
    的頭像 發(fā)表于 05-16 08:52 ?1247次閱讀
    什么是<b class='flag-5'>超級(jí)</b>電容?你對(duì)<b class='flag-5'>超級(jí)</b>電容了解多少?

    超級(jí)電容和鋰電池有什么區(qū)別,超級(jí)電容有哪些優(yōu)勢?

    超級(jí)電容和鋰電池有什么區(qū)別,超級(jí)電容有哪些優(yōu)勢?、什么是超級(jí)電容?超級(jí)電容超級(jí)電容
    的頭像 發(fā)表于 05-16 08:51 ?1919次閱讀
    <b class='flag-5'>超級(jí)</b>電容和鋰電池有什么區(qū)別,<b class='flag-5'>超級(jí)</b>電容有哪些優(yōu)勢?

    為什么選擇超級(jí)電容?優(yōu)勢有哪些?

    為什么選擇超級(jí)電容?優(yōu)勢有哪些?為什么選擇超級(jí)電容,就不得不仔細(xì)說說它的優(yōu)勢了。超級(jí)電容作為種新型電化學(xué)儲(chǔ)能裝置,與傳統(tǒng)電容和鋰電池相比,超級(jí)
    的頭像 發(fā)表于 05-16 08:47 ?2258次閱讀
    為什么選擇<b class='flag-5'>超級(jí)</b>電容?優(yōu)勢有哪些?

    超級(jí)電容器均壓電路狀況與展望

    電壓均壓電路的基本原理是比較相鄰的兩個(gè)超級(jí)電容器的電壓是否致,如果不同電路動(dòng)作,將電壓相對(duì)高的超級(jí)電容器旁路部分電流降低充電電壓升高的速率,使兩個(gè)
    發(fā)表于 03-24 15:13