那曲檬骨新材料有限公司

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語言
    +關注

    關注

    180

    文章

    7614

    瀏覽量

    137738
  • GCC
    GCC
    +關注

    關注

    0

    文章

    108

    瀏覽量

    24890
  • 源碼
    +關注

    關注

    8

    文章

    652

    瀏覽量

    29458
  • 函數
    +關注

    關注

    3

    文章

    4346

    瀏覽量

    62978

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

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

收藏 人收藏

    評論

    相關推薦

    SSM框架的源碼解析與理解

    SSM框架(Spring + Spring MVC + MyBatis)是種在Java開發中常用的輕量級企業級應用框架。它通過整合Spring、Spring MVC和MyBatis三框架,實現了
    的頭像 發表于 12-17 09:20 ?372次閱讀

    libmodbus源碼框架分析

    libmodbus作為優秀且免費開源的跨平臺支持RTU 和 TCP模式的Modbus開發庫,非常值得大家借鑒和學習。本章對libmodbus源代碼進行閱讀和分析。
    的頭像 發表于 11-21 13:47 ?575次閱讀
    libmodbus<b class='flag-5'>源碼</b>框架分析

    基于無操作系統的STM32單片機開發附源碼

    現在非常多的的MCU性能都還不錯,同時用戶也會去擴展些外部RAM,這樣如果高效便捷的管理這些內存是重要話題。 今天給大家分享源碼
    的頭像 發表于 11-15 11:24 ?635次閱讀

    UCGUI單片機源碼

    UCGUI單片機源碼
    發表于 07-04 17:11 ?1次下載

    手搓了ESP32墨水屏閱讀器,蠻簡單的

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

    什么是源碼源碼有什么作用?源碼組件是什么?源碼可二次開發嗎?

    源碼,也稱為源程序,是指未編譯的按照定的程序設計語言規范書寫的文本文件,是系列人類可讀的計算機語言指令。
    的頭像 發表于 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>可二次開發嗎?

    如圖,這個電路給超級電容充電,該怎么理解呢?為啥要用兩負載開關?第二是啥作用?還有旁邊的電阻?

    圖上P5V_SYS_EXT通過負載開關U2給超級電容充電,U2是避免反向電流出現,第二負載開關U3的作用是啥?我看U3的IN和OUT是連在塊的,都是P5V_SYS。兩
    發表于 05-11 09:40

    超級電容怎么充電?超級電容可以直充電嗎?

    超級電容器的充電過程是基于其獨特的雙電層結構和電解質的特性進行的。
    的頭像 發表于 04-15 17:29 ?8658次閱讀

    超級電容的容量能達到多少?超級電容的容量有多大?

    超級電容器的容量是其關鍵的技術參數,直接影響著其在各種應用中的性能表現。
    的頭像 發表于 04-15 16:44 ?1807次閱讀

    什么是超級電容?超級電容有什么用?

    超級電容器,也稱為超級電容或電化學電容器,是種高性能的儲能設備,它介于傳統電容器和充電電池之間,具有獨特的儲能特性。
    的頭像 發表于 04-15 15:23 ?2987次閱讀

    OpenHarmony開發學習:【源碼下載和編譯】

    本文介紹了如何下載鴻蒙系統源碼,如何次性配置可以編譯三目標平臺(`Hi3516`,`Hi3518`和`Hi3861`)的編譯環境,以及如何將源碼編譯為三
    的頭像 發表于 04-14 09:36 ?1013次閱讀
    OpenHarmony開發學習:【<b class='flag-5'>源碼</b>下載和編譯】

    超級跑車的車燈從最初的設計理念到最終的產品實現是怎樣過程?

    超級跑車車燈設計是科技與藝術的完美結合,充分體現了設計的獨特魅力和卓越性能。
    的頭像 發表于 03-26 17:19 ?1249次閱讀
    <b class='flag-5'>超級</b>跑車的車燈從最初的設計理念到最終的產品實現是怎樣<b class='flag-5'>一</b><b class='flag-5'>個</b>過程?

    超級電容是什么?超級電容的性能特性

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

    超級電容模組的優點

    超級電容模組就是將多個超級電容器單體串聯,合作電壓均衡和放電穩壓系統,用鋁合金外殼組合而成的新式能量包。超級電容模組的誕生,彌補了鉛酸電
    的頭像 發表于 03-01 15:10 ?723次閱讀
    <b class='flag-5'>超級</b>電容模組的優點

    超級電容器比電池更好嗎?

    超級電容器是種新型的儲能器件,主要用于斷電后提供短期能量的后備電源,其能量密度介于普通電容和二次電池之間,同時具有高比容量和比功率的特點。那超級電容器比電池更好嗎?讓我們來從以下幾點看看超級
    發表于 02-18 15:38
    二八杠算法| 百家乐官网视频连线| 小孟百家乐官网的玩法技巧和规则| 至尊百家乐规则| 大发888明星婚讯| 百家乐官网薯片| 威尼斯人娱乐城惊喜| 百家乐官网浴盆博彩通排名| 百家乐官方游戏下载| 百家乐官网庄闲多少| 网络百家乐诈骗| 百家乐官网d博彩论坛| 百家乐走势图解| 百家乐官网庄闲点数| 百家乐买对子技巧| 新2百家乐官网娱乐城| 威尼斯人娱乐城备用网| 百家乐官网赌场网| 大发888网页版免费| 万宝路百家乐官网的玩法技巧和规则 | 财神娱乐城信誉| 百家乐注码管理| 澳门百家乐官网赢钱| 百家乐娱乐备用网址| 百家乐官网玄机| 大发888游戏平台 娱乐场下载| 24山天机申山寅向择日| 松阳县| 百家乐赌大小| 百家乐官网强弱走势| bet365怎么存款| 澳门百家乐的公式| 澳门百家乐官网介绍| 大发888体育场下载| 新梦想百家乐官网的玩法技巧和规则| 狮威娱乐城| 百家乐在线娱乐网| 试用的百家乐官网软件| 百家乐代理| 天猫百家乐娱乐城| 百家乐官网游戏种类|