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

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

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

如何提高閱讀源碼的效率

FPGA之家 ? 來源:小麥大叔 ? 作者:小麥大叔 ? 2022-07-06 10:01 ? 次閱讀

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

1 前言

看源碼的時候,心血來潮想弄一下函數(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)三個工具輕松生成源碼的函數(shù)調(diào)用關(guān)系圖;下圖是本人在閱讀FreeRTOS源碼tasks.c時生成的調(diào)用關(guān)系圖,具體如下所示;

045f7db6-fcc3-11ec-ba43-dac502259ad0.png一個例子

2 graphviz 安裝

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

sudoapt-getinstallgraphviz

直接輸入指令后,系統(tǒng)開始安裝;046f787e-fcc3-11ec-ba43-dac502259ad0.png

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

04840af0-fcc3-11ec-ba43-dac502259ad0.png

3 egypt 安裝

egypt官網(wǎng): http://www.gson.org/egypt/

049544b4-fcc3-11ec-ba43-dac502259ad0.png簡潔的首頁

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

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

04b8cbe6-fcc3-11ec-ba43-dac502259ad0.png

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

sudocpegypt/usr/bin

以上,已經(jīng)完成了egypt的安裝;

使用方法如下;

egypt[--omitfunction,function,...][--include-external]...|dotty-
egypt[--omitfunction,function,...][--include-external]...|dot

4 測試

編寫程序test.c,具體如下所示;

#include

voidtest0();
voidtest1();
voidtest2();
voidtest3();

intmain()
{
test1();
test2();
test3();
return0;
}

voidtest0(void){
printf("hello");
}

voidtest1(void)
{
test0();
}

voidtest2(void)
{
test1();
}

voidtest3(void)
{

}

編譯需要加上參數(shù)-fdump-rtl-expand生成相應(yīng)的dump文件;

gcc-fdump-rtl-expand-ctest.c

04c8f034-fcc3-11ec-ba43-dac502259ad0.png

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

輸入如下指令;

egypttest.c.229r.expand|dot-Tpng-otest.png

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

04d42850-fcc3-11ec-ba43-dac502259ad0.png最終調(diào)用關(guān)系圖

5 結(jié)論

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

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

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

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

審核編輯:彭靜

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

    關(guān)注

    180

    文章

    7608

    瀏覽量

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

    關(guān)注

    8

    文章

    645

    瀏覽量

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

    關(guān)注

    3

    文章

    4337

    瀏覽量

    62730

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

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

收藏 人收藏

    評論

    相關(guān)推薦

    SOLIDWORKS 2025提高數(shù)據(jù)效率

    隨著技術(shù)的不斷進(jìn)步,CAD軟件在工程設(shè)計領(lǐng)域的作用日益凸顯。SOLIDWORKS 2025作為新的CAD軟件版本,通過引入一系列創(chuàng)新功能和優(yōu)化措施,顯著提高了數(shù)據(jù)管理的效率和準(zhǔn)確性。
    的頭像 發(fā)表于 01-07 14:49 ?59次閱讀
    SOLIDWORKS 2025<b class='flag-5'>提高</b>數(shù)據(jù)<b class='flag-5'>效率</b>

    怎樣提高三坐標(biāo)測量機(jī)的測量效率

    提高三坐標(biāo)測量機(jī)的測量效率是許多制造和質(zhì)量控制領(lǐng)域中的一個關(guān)鍵問題。三坐標(biāo)測量機(jī)(CMM)是一種精密的測量設(shè)備,用于檢測零件的幾何尺寸和形狀。以下是一些提高三坐標(biāo)測量機(jī)測量效率的方法,
    的頭像 發(fā)表于 12-19 10:20 ?220次閱讀

    如何提高poe供電效率

    提高PoE(Power over Ethernet,以太網(wǎng)供電)供電效率是一個涉及多個方面的綜合性問題。以下是一些具體的建議,旨在幫助提高PoE供電效率: 一、優(yōu)化PoE設(shè)備選擇與設(shè)計
    的頭像 發(fā)表于 11-19 10:45 ?255次閱讀

    如何提高CNC加工效率

    在當(dāng)今競爭激烈的制造業(yè)環(huán)境中,提高CNC加工效率是企業(yè)保持競爭力的關(guān)鍵。CNC機(jī)床的效率不僅影響生產(chǎn)成本,還關(guān)系到產(chǎn)品質(zhì)量和交貨速度。 1. 優(yōu)化CNC程序 1.1 減少空行程 CNC程序中的空行
    的頭像 發(fā)表于 11-12 09:18 ?683次閱讀

    如何提高伺服驅(qū)動器的效率

    在現(xiàn)代工業(yè)自動化領(lǐng)域,伺服驅(qū)動器的效率對于整個系統(tǒng)的能效和性能至關(guān)重要。本文探討了影響伺服驅(qū)動器效率的關(guān)鍵因素,并提出了一系列提高效率的策略,包括優(yōu)化控制算法、改善硬件設(shè)計、采用先進(jìn)的功率電子技術(shù)
    的頭像 發(fā)表于 11-04 15:20 ?402次閱讀

    MES系統(tǒng)如何提高生產(chǎn)效率

    在當(dāng)今競爭激烈的制造行業(yè)中,提高生產(chǎn)效率是企業(yè)生存和發(fā)展的關(guān)鍵。MES系統(tǒng)作為一種先進(jìn)的制造管理工具,已經(jīng)成為許多制造企業(yè)提高生產(chǎn)效率的重要手段。 1. 實時監(jiān)控與數(shù)據(jù)收集 MES系統(tǒng)
    的頭像 發(fā)表于 10-27 09:16 ?327次閱讀

    如何提高云計算的性能和效率

    提高云計算的性能和效率是一個多維度的問題,需要從計算性能、存儲性能、網(wǎng)絡(luò)性能等多個方面入手。以下是一些具體的策略和方法: 一、計算性能優(yōu)化 資源分配 : 根據(jù)用戶需求動態(tài)分配資源,以提高服務(wù)器
    的頭像 發(fā)表于 10-24 09:23 ?550次閱讀

    預(yù)測性柵極驅(qū)動提高轉(zhuǎn)換器效率

    電子發(fā)燒友網(wǎng)站提供《預(yù)測性柵極驅(qū)動提高轉(zhuǎn)換器效率.pdf》資料免費下載
    發(fā)表于 10-21 09:17 ?0次下載
    預(yù)測性柵極驅(qū)動<b class='flag-5'>提高</b>轉(zhuǎn)換器<b class='flag-5'>效率</b>

    提高LLC轉(zhuǎn)換器的ZVS和效率

    電子發(fā)燒友網(wǎng)站提供《提高LLC轉(zhuǎn)換器的ZVS和效率.pdf》資料免費下載
    發(fā)表于 10-14 10:03 ?0次下載
    <b class='flag-5'>提高</b>LLC轉(zhuǎn)換器的ZVS和<b class='flag-5'>效率</b>

    東莞mes系統(tǒng):提高生產(chǎn)效率的利器

    東莞作為中國制造業(yè)的重要基地之一,擁有眾多制造企業(yè),其中不乏一些領(lǐng)先的MES系統(tǒng)供應(yīng)商。這些 MES系統(tǒng)供應(yīng)商 致力于為東莞的制造企業(yè)提供智能制造解決方案,幫助企業(yè)提高生產(chǎn)效率、降低生產(chǎn)成本、提升
    的頭像 發(fā)表于 05-21 15:37 ?465次閱讀

    深圳MES系統(tǒng)如何提高生產(chǎn)效率

    深圳MES系統(tǒng)可以通過多種方式提高生產(chǎn)效率,具體如下: 實時監(jiān)控和分析:MES系統(tǒng)可以實時收集并分析生產(chǎn)數(shù)據(jù),幫助企業(yè)及時了解生產(chǎn)狀況,發(fā)現(xiàn)問題并迅速解決,避免問題擴(kuò)大化。這種實時監(jiān)控和分析功能可以
    的頭像 發(fā)表于 03-25 14:34 ?464次閱讀

    提高效率的DC電源模塊設(shè)計技巧

    BOSHIDA ?提高效率的DC電源模塊設(shè)計技巧 設(shè)計高效率的BOSHIDA ?DC電源模塊可以幫助減少能源浪費和提高系統(tǒng)功耗,以下是一些設(shè)計技巧: 1. 選擇高效率的功率轉(zhuǎn)換器:選擇
    的頭像 發(fā)表于 02-26 14:27 ?569次閱讀
    <b class='flag-5'>提高效率</b>的DC電源模塊設(shè)計技巧

    提高電源整機(jī)效率的方法

    電源整機(jī)效率是指電源將輸入電能轉(zhuǎn)換為輸出電能的效率,通常用百分比表示。提高電源整機(jī)效率可以降低能源消耗,減少環(huán)境污染,提高設(shè)備的運行
    的頭像 發(fā)表于 01-17 15:57 ?732次閱讀

    Apache Doris聚合函數(shù)源碼解析

    筆者最近由于工作需要開始調(diào)研 Apache Doris,通過閱讀聚合函數(shù)代碼切入 Apache Doris 內(nèi)核,同時也秉承著開源的精神,開發(fā)了 array_agg 函數(shù)并貢獻(xiàn)給社區(qū)。筆者通過這篇文章記錄下對源碼的一些理解,同時也方便后面的新人更快速地上手
    的頭像 發(fā)表于 01-16 09:52 ?1057次閱讀
    Apache Doris聚合函數(shù)<b class='flag-5'>源碼</b>解析

    提高系統(tǒng)效率的幾個誤解解析

    重復(fù)使用才會提高系統(tǒng)效率。所以在通信系統(tǒng)中一般只打開指令CACHE,數(shù)據(jù)CACHE即使打開也只局限在部分存儲空間,如堆棧部分。同時也要求程序設(shè)計 要兼顧C(jī)ACHE的容量及塊大小,這涉及到關(guān)鍵代碼循環(huán)體
    發(fā)表于 01-15 07:29