自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Linux源代碼分析工具鏈

開發(fā)
看源代碼是一個程序員必須經(jīng)歷的事情,也是可以提升能力的一個捷徑。個人認為: 要完全掌握一個軟件的方法只有閱讀源碼。

前言

看源代碼是一個程序員必須經(jīng)歷的事情,也是可以提升能力的一個捷徑。個人認為: 要完全掌握一個軟件的方法只有閱讀源碼。

在Windows下有sourceinsight這個源碼閱讀軟件(雖然我沒用過,但是網(wǎng)上評價還不錯),由于我是個Linuxer,并不喜歡用Windows,所以自然是選擇在Linux下閱讀源碼的工具了。

下面我將逐一介紹在Linux下閱讀源碼的工具。

Linux源代碼分析工具鏈

vim+ctags+cscope

源碼閱讀三劍客:vim配合ctags和cscope,足以在源代碼里面自由翱翔,在函數(shù)和變量間自由跳轉(zhuǎn)。

安裝

sudo apt-get install vim ctags cscope

vim

vim的使用就略過了,網(wǎng)上資料很多,不是一篇文章能說完的,未來我可能會寫一篇vim的使用心得。推薦一篇簡明 Vim 練級攻略,看完就差不多會用了。

ctags

ctags的使用很簡單,vim已經(jīng)內(nèi)置了對ctags的支持。

首先在源代碼根目錄執(zhí)行ctags -R,遞歸的為源碼建立tags,在根目錄會生成一個Tags的文件,存放各種函數(shù)和變量的tag,便于跳轉(zhuǎn):

  • 使光標在函數(shù)或變量上,Ctrl + ]即可跳轉(zhuǎn)到其定義處

  • Ctrl + t可以回到你跳轉(zhuǎn)之前的位置

對于簡單的代碼,ctags就夠用了,但是對于比較復(fù)雜的代碼來說,ctags顯得有點力不從心,于是,下一位劍客就登場了。

cscope

vim同樣內(nèi)置了對cscope的支持。

首先在源代碼根目錄執(zhí)行cscope -Rbq,就會生成cscope.out文件(索引數(shù)據(jù)庫)

  • -R: 在生成索引文件時,搜索子目錄樹中的代碼

  • -b: 只生成索引文件,不進入cscope的界面

  • -q: 生成cscope.in.out和cscope.po.out文件,加快cscope的索引速度

然后在vim中執(zhí)行:cs add cscope.out,添加數(shù)據(jù)庫。

接下來就可以使用:cs find x var進行查找。(x代表查詢選項,var表示要查找的函數(shù)或變量名)

cscope支持8種查詢方式

  • s: 查找C語言符號,即查找函數(shù)名、宏、枚舉值等出現(xiàn)的地方

  • g: 查找函數(shù)、宏、枚舉等定義的位置,類似ctags所提供的功能

  • d: 查找本函數(shù)調(diào)用的函數(shù)

  • c: 查找調(diào)用本函數(shù)的函數(shù)

  • t: 查找指定的字符串

  • e: 查找egrep模式,相當(dāng)于egrep功能,但查找速度快多了

  • f: 查找并打開文件,類似vim的find功能

  • i: 查找包含本文件的文件

例如,我們想在vim 7.0的源代碼中查找調(diào)用do_cscope()函數(shù)的函數(shù),我們可以輸入:”:cs find c do_cscope“,回車后發(fā)現(xiàn)沒有找到匹配的功能,可能并沒有函數(shù)調(diào)用do_cscope()。我們再輸入”:cs find s do_cscope“,查找這個C符號出現(xiàn)的位置,現(xiàn)在vim列出了這個符號出現(xiàn)的所有位置。

每次都有輸入cs find來查找數(shù)據(jù)是不是有點麻煩,有沒有更方便的方法呢。當(dāng)然有,vim的神奇之處在其可定制性。提供一份cscope的配置,將其放在.vimrc中即可。

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" cscope setting
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
if has("cscope")
  set csprg=/usr/bin/cscope
  set csto=1
  set cst
  set nocsverb
  " add any database in current directory
  if filereadable("cscope.out")
      cs add cscope.out
  endif
  set csverb
endif

nmap <C-@>s :cs find s <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>g :cs find g <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>c :cs find c <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>t :cs find t <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>e :cs find e <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>f :cs find f <C-R>=expand("<cfile>")<CR><CR>
nmap <C-@>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>
nmap <C-@>d :cs find d <C-R>=expand("<cword>")<CR><CR>

上面的配置即把Ctrl + @作為:cs find的快捷鍵,也就是說要查找某個函數(shù)名,只需要把光標放在函數(shù)名上,按下Ctrl + @ + s即可,簡直不能更方便。而且你可以自己修改配置,映射到自己覺得舒服的快捷鍵上。

本著不重復(fù)造輪子的原則,我就簡單的寫了cscope的基本用法,其實基本上就夠用了,進階的用法參考這篇文章vi/vim使用進階: 程序員的利器 – cscope。

doxygen

上面我們講的是用vim來查看源代碼,但是面對幾十萬代碼的時候,想要看清楚各個結(jié)構(gòu)體之間的關(guān)系就不是vim能夠做到的了。這時候我們就需要doxygen來幫手了。

Doxygen is the de facto standard tool for generating documentation from annotated C++ sources, but it also supports other popular programming languages such as C, Objective-C, C#, PHP, Java, Python, IDL (Corba, Microsoft, and UNO/OpenOffice flavors), Fortran, VHDL, Tcl, and to some extent D.

doxygen是一個根據(jù)源代碼生成文檔的工具,這貨雖然主要是給C++用的,但是它也對其他語言有支持。

安裝直接去官網(wǎng),按照其指導(dǎo)安裝即可。

下面介紹一下doxygen的使用方法。

首先,在源代碼根目錄執(zhí)行doxygen -g,然后在根目錄就會突然冒出一個名為Doxyfile的文件,這個文件就是doxygen生成文檔的配置文件了。

那么,重點來了,怎么配置這個文件,默認的配置是根據(jù)代碼生成各個結(jié)構(gòu)體的成員數(shù)據(jù),然后生成html和latex兩個文件夾,分別是網(wǎng)頁和latex文檔。

說實話,默認生成的文檔并沒有什么卵用,除了讓你更方便的看到各個結(jié)構(gòu)體的組成成員。我們關(guān)心的是各個結(jié)構(gòu)體之間的關(guān)系,這是針對C而言的。對與C++和java而言,關(guān)心的是類之間的關(guān)系。所以,默認的配置肯定是要修改的。至于怎么改,看官方文檔。

當(dāng)然了,如果這篇文章唯一給出的建議就是看文檔,那這篇文章有什么意義呢。大家都知道看文檔可以解決問題,但是時間成本太高,而且是英文的。寫這篇文章的目的是分享自己學(xué)習(xí)得到的經(jīng)驗,讓大家少走彎路,如果不能解決你的問題,只能去看文檔了。

接下來我根據(jù)我自己看文檔用到的配置跟大家解釋一下。

首先,Doxygen里面的配置可謂又臭又長,你絕對不會有讀完它的欲望。所以我給出幾個關(guān)鍵的配置項,到時候搜索它修改即可

  • 這是針對各種語言優(yōu)化輸出的選項,默認都是NO,因為它不清楚你用的是什么語言(話說看一下后綴不就知道了嗎…)

    OPTIMIZE_OUTPUT_FOR_C
    OPTIMIZE_OUTPUT_JAVA
    OPTIMIZE_FOR_FORTRAN
    OPTIMIZE_OUTPUT_VHDL

  • 這個是生成文檔的類型的選項,默認生成html和latex,共支持六種類型的文檔,每種類型的生成配置也是很多,具體根據(jù)需要配置

    GENERATE_HTML
    GENERATE_LATEX
    GENERATE_RTF
    GENERATE_XML
    GENERATE_DOCBOOK
    GENERATE_MAN

  • 關(guān)于生成圖像的選項。doxygen使用dot這個工具來繪圖,所以要先執(zhí)行sudo apt-get install graphviz安裝dot。在設(shè)置好這個繪圖選項之后,doxygen就會生成各個結(jié)構(gòu)體的關(guān)系,對于類會生成函數(shù)調(diào)用關(guān)系(我沒試過,因為只試過C 的)。

    HAVE_DOT (一定要置為YES,后面的選項都依賴這個)
    DOT_NUM_THREADS (使用dot繪圖的線程數(shù)量,越多越快,我一般是設(shè)置跟cpu的核數(shù)一樣)

給一個結(jié)構(gòu)體關(guān)系圖,就是doxygen生成的。

Linux源代碼分析工具鏈

[machine_class]

最后一步,在源碼根目錄執(zhí)行doxygen,它會自動找到Doxygen配置,根據(jù)配置生成文檔。

gdb

最后一個工具,大名鼎鼎的gdb。分析源碼執(zhí)行流程的最好方式的是運行它,然后一步步執(zhí)行。用來觀察它最好的工具當(dāng)然是gdb了(針對C/C++)。

gdb的使用我也不打算造輪子,直接參考用GDB調(diào)試程序,這篇寫的很好,通俗易懂。

后記

以上就是我在閱讀源碼的時候使用的Linux工具,三劍客vim+ctags+cscope,兩板斧doxygen gdb,足以馳騁源代碼的江湖。

以上工具,vim和gdb是最難學(xué)的,學(xué)習(xí)曲線很陡峭。但是學(xué)好之后,就能守得云開見月明。

責(zé)任編輯:王雪燕
相關(guān)推薦

2015-08-26 17:38:47

Linux源代碼

2021-10-01 12:17:30

Facebook開源工具Mariana Tre

2011-08-02 10:13:30

Java工具

2011-02-23 14:54:58

FileZilla

2011-02-23 14:46:21

FileZilla

2011-02-23 14:16:43

FileZilla

2011-02-23 14:39:27

FileZilla

2011-02-23 14:26:28

FileZilla

2011-02-23 15:26:01

FileZilla

2011-02-23 15:33:42

FileZilla

2011-02-23 13:47:33

FileZilla

2011-02-23 15:11:27

FileZilla

2011-02-23 15:21:06

FileZilla

2009-03-10 08:59:18

2010-02-24 16:14:26

Linux內(nèi)存

2018-05-25 14:16:55

NFS源代碼線程

2009-07-02 13:59:35

JSP后臺

2010-03-02 10:44:52

Linux rpm

2011-08-24 15:42:38

LUA源代碼

2021-05-06 09:58:08

微軟AI 系統(tǒng)工具Counterfit
點贊
收藏

51CTO技術(shù)棧公眾號