乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      一個超級實用的源碼閱讀小技巧

       漢無為 2021-05-30

      工欲善其事必先利其器;

      我發(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ù)的注釋需要嚴格按照doxygen
      的規(guī)范,具體可以自己去搜索一下,當然使用source insight等利器也很方便;本文主要通過

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

      圖片
      一個例子

      2 graphviz 安裝

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

      sudo apt-get install graphviz

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

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

      圖片

      3 egypt 安裝

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

      圖片
      簡潔的首頁
      領(lǐng)

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

      圖片

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

      圖片

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

      輸入如下指令;

      egypt test.c.229r.expand | dot -T png -o test.png

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

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

      5 結(jié)論

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

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

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多