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

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

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

如何提高閱讀源碼的效率

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

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

1 前言

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

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

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

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

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

將egypt移動到/usr/bin,方便后面直接調(diào)用,或者將當前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生成相應的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)用關系圖

5 結論

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

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

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

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

審核編輯:彭靜

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

    關注

    180

    文章

    7595

    瀏覽量

    135928
  • 源碼
    +關注

    關注

    8

    文章

    632

    瀏覽量

    29116
  • 函數(shù)
    +關注

    關注

    3

    文章

    4286

    瀏覽量

    62337

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

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

收藏 人收藏

    評論

    相關推薦

    如何提高CNC加工效率

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

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

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

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

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

    提高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è),其中不乏一些領先的MES系統(tǒng)供應商。這些 MES系統(tǒng)供應商 致力于為東莞的制造企業(yè)提供智能制造解決方案,幫助企業(yè)提高生產(chǎn)效率、降低生產(chǎn)成本、提升
    的頭像 發(fā)表于 05-21 15:37 ?408次閱讀

    提高效率的DC電源模塊設計技巧

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

    提高電源整機效率的方法

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

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

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

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

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

    OneFlow Softmax算子源碼解讀之WarpSoftmax

    寫在前面:近來筆者偶然間接觸了一個深度學習框架 OneFlow,所以這段時間主要在閱讀 OneFlow 框架的 cuda 源碼。官方源碼基于不同場景分三種方式實現(xiàn) Softmax,本文主要介紹其中一種的實現(xiàn)過程,即 Warp 級
    的頭像 發(fā)表于 01-08 09:24 ?722次閱讀
    OneFlow Softmax算子<b class='flag-5'>源碼</b>解讀之WarpSoftmax

    SiC FET神應用,在各種領域提高功率轉(zhuǎn)換效率

    SiC FET神應用,在各種領域提高功率轉(zhuǎn)換效率
    的頭像 發(fā)表于 11-30 09:46 ?391次閱讀
    SiC FET神應用,在各種領域<b class='flag-5'>提高</b>功率轉(zhuǎn)換<b class='flag-5'>效率</b>

    如何提高電源適配器的效率?

    如何提高電源適配器的效率提高電源適配器的效率對于節(jié)能和環(huán)境保護至關重要。在本文中,我們將討論一些可以提高電源適配器
    的頭像 發(fā)表于 11-23 16:04 ?973次閱讀

    如何提高電源適配器的效率因數(shù)?

    如何提高電源適配器的效率因數(shù)? 提高電源適配器的效率因數(shù)是提高能源利用效率的一種重要措施。通過
    的頭像 發(fā)表于 11-23 14:51 ?766次閱讀

    《Android Runtime源碼解析》+深入體會第六章ART的執(zhí)行(4)

    和技能,不斷提高自己的專業(yè)素養(yǎng)。以上就是我在閱讀\"Android Runtime源碼解析\"這部分內(nèi)容后的心得體會。 我希望這些體會能對你有所幫助! 謝謝! 本人在本論壇內(nèi)的試讀
    發(fā)表于 11-17 01:33

    提高開關電源待機效率的方法

    電子發(fā)燒友網(wǎng)站提供《提高開關電源待機效率的方法.doc》資料免費下載
    發(fā)表于 11-15 10:42 ?0次下載
    <b class='flag-5'>提高</b>開關電源待機<b class='flag-5'>效率</b>的方法