色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

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

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

FPGA之家 ? 來(lái)源:小麥大叔 ? 作者:小麥大叔 ? 2021-05-29 11:50 ? 次閱讀

工欲善其事必先利其器;

我發(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)系圖,具體如下所示;

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

一個(gè)例子

2 graphviz 安裝

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

sudo apt-get install graphviz

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

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

簡(jiǎn)潔的首頁(yè)

下載后的文件為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 測(cè)試

編寫(xiě)程序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語(yǔ)言源碼的閱讀用這個(gè)辦法還是有點(diǎn)小麻煩,無(wú)法一鍵生成調(diào)用關(guān)系,,

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

編輯:jq

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

    關(guān)注

    180

    文章

    7614

    瀏覽量

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

    關(guān)注

    0

    文章

    108

    瀏覽量

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

    關(guān)注

    8

    文章

    652

    瀏覽量

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

    關(guān)注

    3

    文章

    4345

    瀏覽量

    62867

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

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    SSM框架的源碼解析與理解

    SSM框架(Spring + Spring MVC + MyBatis)是種在Java開(kāi)發(fā)中常用的輕量級(jí)企業(yè)級(jí)應(yīng)用框架。它通過(guò)整合Spring、Spring MVC和MyBatis三個(gè)框架,實(shí)現(xiàn)了
    的頭像 發(fā)表于 12-17 09:20 ?344次閱讀

    libmodbus源碼框架分析

    libmodbus作為個(gè)優(yōu)秀且免費(fèi)開(kāi)源的跨平臺(tái)支持RTU 和 TCP模式的Modbus開(kāi)發(fā)庫(kù),非常值得大家借鑒和學(xué)習(xí)。本章對(duì)libmodbus源代碼進(jìn)行閱讀和分析。
    的頭像 發(fā)表于 11-21 13:47 ?529次閱讀
    libmodbus<b class='flag-5'>源碼</b>框架分析

    基于無(wú)操作系統(tǒng)的STM32單片機(jī)開(kāi)發(fā)附源碼

    現(xiàn)在非常多的的MCU性能都還不錯(cuò),同時(shí)用戶(hù)也會(huì)去擴(kuò)展些外部RAM,這樣如果高效便捷的管理這些內(nèi)存是個(gè)重要話題。 今天給大家分享源碼
    的頭像 發(fā)表于 11-15 11:24 ?592次閱讀

    手搓了個(gè)ESP32墨水屏閱讀器,蠻簡(jiǎn)單的

    工程名稱(chēng):3.7寸墨水屏閱讀器時(shí)鐘溫濕度TXT/Epub前言帥小伙手搓ESP32墨水屏閱讀器!可輕松續(xù)航100天!01閱讀器功能/亮點(diǎn)?1.具有閱讀器、時(shí)鐘、溫濕度監(jiān)測(cè)、鬧鐘、番茄鐘功
    的頭像 發(fā)表于 05-27 08:04 ?331次閱讀
    手搓了<b class='flag-5'>一</b><b class='flag-5'>個(gè)</b>ESP32墨水屏<b class='flag-5'>閱讀</b>器,蠻簡(jiǎn)單的

    什么是源碼源碼有什么作用?源碼組件是什么?源碼可二次開(kāi)發(fā)嗎?

    源碼,也稱(chēng)為源程序,是指未編譯的按照定的程序設(shè)計(jì)語(yǔ)言規(guī)范書(shū)寫(xiě)的文本文件,是系列人類(lèi)可讀的計(jì)算機(jī)語(yǔ)言指令。
    的頭像 發(fā)表于 05-25 14:55 ?1.6w次閱讀
    什么是<b class='flag-5'>源碼</b>?<b class='flag-5'>源碼</b>有什么作用?<b class='flag-5'>源碼</b>組件是什么?<b class='flag-5'>源碼</b>可二次開(kāi)發(fā)嗎?

    如圖,這個(gè)電路給超級(jí)電容充電,該怎么理解呢?為啥要用兩個(gè)負(fù)載開(kāi)關(guān)?第二個(gè)是啥作用?還有旁邊的電阻?

    圖上P5V_SYS_EXT通過(guò)負(fù)載開(kāi)關(guān)U2給超級(jí)電容充電,U2是避免反向電流出現(xiàn),第二個(gè)負(fù)載開(kāi)關(guān)U3的作用是啥?我看U3的IN和OUT是連在塊的,都是P5V_SYS。兩個(gè)
    發(fā)表于 05-11 09:40

    超級(jí)電容怎么充電?超級(jí)電容可以直充電嗎?

    超級(jí)電容器的充電過(guò)程是基于其獨(dú)特的雙電層結(jié)構(gòu)和電解質(zhì)的特性進(jìn)行的。
    的頭像 發(fā)表于 04-15 17:29 ?8421次閱讀

    超級(jí)電容的容量能達(dá)到多少?超級(jí)電容的容量有多大?

    超級(jí)電容器的容量是其個(gè)關(guān)鍵的技術(shù)參數(shù),直接影響著其在各種應(yīng)用中的性能表現(xiàn)。
    的頭像 發(fā)表于 04-15 16:44 ?1770次閱讀

    什么是超級(jí)電容?超級(jí)電容有什么用?

    超級(jí)電容器,也稱(chēng)為超級(jí)電容或電化學(xué)電容器,是種高性能的儲(chǔ)能設(shè)備,它介于傳統(tǒng)電容器和充電電池之間,具有獨(dú)特的儲(chǔ)能特性。
    的頭像 發(fā)表于 04-15 15:23 ?2921次閱讀

    OpenHarmony開(kāi)發(fā)學(xué)習(xí):【源碼下載和編譯】

    本文介紹了如何下載鴻蒙系統(tǒng)源碼,如何次性配置可以編譯三個(gè)目標(biāo)平臺(tái)(`Hi3516`,`Hi3518`和`Hi3861`)的編譯環(huán)境,以及如何將源碼編譯為三
    的頭像 發(fā)表于 04-14 09:36 ?998次閱讀
    OpenHarmony開(kāi)發(fā)學(xué)習(xí):【<b class='flag-5'>源碼</b>下載和編譯】

    超級(jí)跑車(chē)的車(chē)燈從最初的設(shè)計(jì)理念到最終的產(chǎn)品實(shí)現(xiàn)是怎樣個(gè)過(guò)程?

    超級(jí)跑車(chē)車(chē)燈設(shè)計(jì)是科技與藝術(shù)的完美結(jié)合,充分體現(xiàn)了設(shè)計(jì)的獨(dú)特魅力和卓越性能。
    的頭像 發(fā)表于 03-26 17:19 ?1226次閱讀
    <b class='flag-5'>超級(jí)</b>跑車(chē)的車(chē)燈從最初的設(shè)計(jì)理念到最終的產(chǎn)品實(shí)現(xiàn)是怎樣<b class='flag-5'>一</b><b class='flag-5'>個(gè)</b>過(guò)程?

    超級(jí)電容是什么?超級(jí)電容的性能特性

    超級(jí)電容是什么?超級(jí)電容的性能特性。超級(jí)電容是種新型儲(chǔ)能裝置,是以石墨烯等復(fù)合材料為正極材料、在活性炭材料中包裹碳納米管或石墨烯等導(dǎo)電高分子材料,利用充放電過(guò)程中的電荷遷移來(lái)儲(chǔ)存電能
    的頭像 發(fā)表于 03-15 09:53 ?1518次閱讀
    <b class='flag-5'>超級(jí)</b>電容是什么?<b class='flag-5'>超級(jí)</b>電容的性能特性

    超級(jí)電容模組的優(yōu)點(diǎn)

    超級(jí)電容模組就是將多個(gè)超級(jí)電容器單體串聯(lián),合作電壓均衡和放電穩(wěn)壓系統(tǒng),用鋁合金外殼組合而成的個(gè)新式能量包。超級(jí)電容模組的誕生,彌補(bǔ)了鉛酸電
    的頭像 發(fā)表于 03-01 15:10 ?704次閱讀
    <b class='flag-5'>超級(jí)</b>電容模組的優(yōu)點(diǎn)

    超級(jí)電容器比電池更好嗎?

    超級(jí)電容器是種新型的儲(chǔ)能器件,主要用于斷電后提供短期能量的后備電源,其能量密度介于普通電容和二次電池之間,同時(shí)具有高比容量和比功率的特點(diǎn)。那超級(jí)電容器比電池更好嗎?讓我們來(lái)從以下幾點(diǎn)看看超級(jí)
    發(fā)表于 02-18 15:38

    超級(jí)電容器質(zhì)量好壞怎么判斷?

    電容器的廠商信譽(yù)、產(chǎn)品認(rèn)證、容量與電壓、內(nèi)阻與損耗、壽命與可靠性幾個(gè)方面來(lái)詳盡、詳實(shí)、細(xì)致地分析如何判斷超級(jí)電容器的質(zhì)量。 首先,我們可以從超級(jí)電容器的廠商信譽(yù)來(lái)判斷其質(zhì)量好壞。個(gè)
    的頭像 發(fā)表于 02-02 11:34 ?1035次閱讀
    主站蜘蛛池模板: 长篇高h肉爽文丝袜| 女朋友的妈妈在线观看| 国产色婷婷亚洲99麻豆| 久就热视频精品免费99| 色多多污污在线观看网站| 伊人久久大香线蕉综合高清| xvideos中文版在线视频| 精品国产自在现线拍400部| 日本高清片免费观看| 在线观看永久免费网址| 国产成人在线视频免费观看| 美国CERANETWORK超清| 亚洲精品高清在线观看| 成人免费在线视频| 狼群影院视频在线观看WWW| 亚洲 欧洲 国产 日产 综合| 超碰97av 在线人人操| 蜜芽丅v新网站在线观看| 亚洲色欲国产AV精品综合| 国产高清视频在线观看97| 女人十八毛片水真多啊| 伊人久久大香线蕉影院95| 国产永久免费高清在线观看| 青青视频国产依人在线| 99久久e免费热视频百度| 久久一er精这里有精品| 亚洲精品6久久久久中文字幕| 东京热百度影音| 男人的天堂MV在线视频免费观看| 一二三四在线高清中文版免费观看电影| 国产精品…在线观看| 日本理伦片午夜理伦片| 99久久99久久精品免费看子| 巨胸美乳中文在线观看| 月夜直播免费看| 久久综合久久伊人| 100国产精品人妻无码| 久久国产精品永久网站| 亚洲无码小格式| 久久视频这只精品99re6| 永久免费无码AV国产网站|