精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Linux源代碼分析工具鏈

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

前言

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

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

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

Linux源代碼分析工具鏈

vim+ctags+cscope

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

安裝

sudo apt-get install vim ctags cscope

vim

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

ctags

ctags的使用很簡單,vim已經內置了對ctags的支持。

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

  • 使光標在函數或變量上,Ctrl + ]即可跳轉到其定義處

  • Ctrl + t可以回到你跳轉之前的位置

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

cscope

vim同樣內置了對cscope的支持。

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

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

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

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

然后在vim中執行:cs add cscope.out,添加數據庫。

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

cscope支持8種查詢方式

  • s: 查找C語言符號,即查找函數名、宏、枚舉值等出現的地方

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

  • d: 查找本函數調用的函數

  • c: 查找調用本函數的函數

  • t: 查找指定的字符串

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

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

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

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

每次都有輸入cs find來查找數據是不是有點麻煩,有沒有更方便的方法呢。當然有,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的快捷鍵,也就是說要查找某個函數名,只需要把光標放在函數名上,按下Ctrl + @ + s即可,簡直不能更方便。而且你可以自己修改配置,映射到自己覺得舒服的快捷鍵上。

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

doxygen

上面我們講的是用vim來查看源代碼,但是面對幾十萬代碼的時候,想要看清楚各個結構體之間的關系就不是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是一個根據源代碼生成文檔的工具,這貨雖然主要是給C++用的,但是它也對其他語言有支持。

安裝直接去官網,按照其指導安裝即可。

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

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

那么,重點來了,怎么配置這個文件,默認的配置是根據代碼生成各個結構體的成員數據,然后生成html和latex兩個文件夾,分別是網頁和latex文檔。

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

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

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

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

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

    OPTIMIZE_OUTPUT_FOR_C
    OPTIMIZE_OUTPUT_JAVA
    OPTIMIZE_FOR_FORTRAN
    OPTIMIZE_OUTPUT_VHDL

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

    GENERATE_HTML
    GENERATE_LATEX
    GENERATE_RTF
    GENERATE_XML
    GENERATE_DOCBOOK
    GENERATE_MAN

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

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

給一個結構體關系圖,就是doxygen生成的。

Linux源代碼分析工具鏈

[machine_class]

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

gdb

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

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

后記

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

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

責任編輯:王雪燕
相關推薦

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:39:27

FileZilla

2011-02-23 14:46:21

FileZilla

2011-02-23 14:16:43

FileZilla

2011-02-23 14:54:58

FileZilla

2011-02-23 15:33:42

FileZilla

2011-02-23 15:26:01

FileZilla

2011-02-23 14:26:28

FileZilla

2011-02-23 15:11:27

FileZilla

2011-02-23 15:21:06

FileZilla

2011-02-23 13:47:33

FileZilla

2009-03-10 08:59:18

2018-05-25 14:16:55

NFS源代碼線程

2010-02-24 16:14:26

Linux內存

2009-07-02 13:59:35

JSP后臺

2011-08-24 15:42:38

LUA源代碼

2010-03-02 10:44:52

Linux rpm

2021-05-06 09:58:08

微軟AI 系統工具Counterfit
點贊
收藏

51CTO技術棧公眾號

久久精品视频8| 欧美性大战久久久久久久| 这里只有精品视频在线观看| 国产成人看片| 成人无码精品1区2区3区免费看| 永久免费网站在线| 国内成人自拍| 高清在线不卡av| 永久免费看mv网站入口亚洲| 自拍日韩亚洲一区在线| 91欧美日韩麻豆精品| 免费观看久久av| 亚洲成人你懂的| av一区二区三区四区电影| 91免费在线看片| 九九热线视频只有这里最精品| 成人三级伦理片| 欧美超级免费视 在线| 中文字幕第100页| 第一页在线观看| 久久一综合视频| 精品中文字幕久久久久久| 亚洲熟妇无码av在线播放| 888奇米影视| 韩国欧美一区| 欧美一级理论片| 特色特色大片在线| 国产女人18毛片18精品| 99精品电影| 欧美美女一区二区在线观看| 亚洲午夜精品久久| 在线免费观看日韩视频| 国产精品99久久精品| 亚洲国产一区自拍| 亚洲熟女乱色一区二区三区| 欧洲伦理片一区 二区 三区| 免播放器亚洲| 在线观看视频亚洲| 影音先锋黄色资源| 超碰一区二区| 国产欧美综合色| 国产精品永久免费视频| 永久免费未视频| 精品成人18| 亚洲国产成人精品视频| 亚洲欧美成人一区| 国产特级黄色片| 免费欧美在线视频| 欧美成人中文字幕| 特黄一区二区三区| 视频一区在线观看| 国产视频精品久久久| 黄色录像a级片| 成人在线爆射| 色哟哟精品一区| 亚洲一区高清| www 日韩| 国产91在线观看| 91在线中文字幕| 国产香蕉视频在线| sdde在线播放一区二区| 欧美一区二区视频在线观看2020| 国产制服91一区二区三区制服| 亚洲精品911| 亚洲女同在线| 欧美有码在线观看视频| 中文字幕求饶的少妇| 日本精品三区| 亚洲国产成人精品久久| 亚洲免费看av| 免费污视频在线| 国产日韩欧美a| 999国产在线| 国产情侣免费视频| 精品成人一区| 色一情一乱一区二区| www男人天堂| 青草综合视频| 色综合视频在线观看| 蜜桃av乱码一区二区三区| 97免费观看视频| 亚洲清纯自拍| 最近日韩中文字幕中文| av片在线免费看| 香蕉国产精品| 亚洲图片制服诱惑| 国产精品嫩草69影院| 成人黄色图片网站| 欧美日韩国产精品一区二区三区四区 | 亚洲国产精品久久久久秋霞影院 | 久久精品99| 在线免费看av的网站| 国产一区二区三区美女| 国产精品极品尤物在线观看| 国产午夜福利一区二区| 国产精品毛片在线| 久久久久久久国产精品| 小嫩苞一区二区三区| 欧美在线播放| 久久成人精品一区二区三区| 一本加勒比北条麻妃| caoporn成人| 欧美一区二区在线免费观看| 国产十八熟妇av成人一区| 国产精品一国产精品| 久久精品一区中文字幕| 亚洲天堂网av在线| 日韩午夜在线| 久久久午夜视频| a级片在线观看免费| 日韩在线视屏| 在线观看久久久久久| 欧美成人精品激情在线视频| 久久国产日韩| 2021国产精品视频| 96日本xxxxxⅹxxx17| 91性感美女视频| 久久久久久高清| fc2ppv国产精品久久| 亚洲丝袜美腿综合| 熟妇熟女乱妇乱女网站| 米奇777四色精品人人爽| 国产精品久久久久久久久免费丝袜 | 国产免费av一区二区| 精品99视频| 国产欧美精品日韩精品| 手机福利小视频在线播放| 99国产精品久| 欧美精品久久久| 日本福利片高清在线观看| 亚洲免费伊人电影| 69sex久久精品国产麻豆| 国产盗摄一区二区| 福利视频导航一区| 国产在线观看免费播放| 99久久国产综合精品成人影院| 亲爱的老师9免费观看全集电视剧| 欧美日韩一二三四区| 日本怡春院一区二区| 成人免费午夜电影| 男人天堂网在线视频| 91啪亚洲精品| 轻点好疼好大好爽视频| 国内精品视频| 亚洲国产精品字幕| 九九九免费视频| 亚洲欧美日韩精品一区二区 | 欧美激情手机在线视频| 国产精品一区二区av白丝下载| 欧美国产精品中文字幕| 男人天堂成人网| 欧美视频精品| 亚洲电影免费观看高清完整版在线观看 | www.亚洲色图.com| 欧美自拍资源在线| 久草中文在线| 亚洲成在人线免费| 国产精品99精品无码视亚| 韩国亚洲精品| 狠狠色伊人亚洲综合网站色| 成av人电影在线观看| 色94色欧美sute亚洲线路一久 | 国产又大又黑又粗免费视频| 成人精品视频一区二区三区尤物| 美女视频久久| av在线app| 日韩视频在线永久播放| 久久久精品一区二区涩爱| 久久精品麻豆| 色99中文字幕| yellow字幕网在线| 欧美日韩卡一卡二| www.超碰97| 欧美在线网站| 国产精品二区二区三区| 男女羞羞在线观看| 欧美一区二区国产| 国产亚洲精品码| 91在线视频官网| 欧美精品性生活| 欧美成人嫩草网站| 精品国产免费久久久久久尖叫 | 国产精品精品| 成人永久免费| 日韩免费小视频| 久久精品亚洲精品| 完全免费av在线播放| 国产在线69| 亚洲精品一区在线观看| 影音先锋男人资源在线观看| 国产一区二区在线电影| 男女激情无遮挡| 不卡在线一区二区| 不卡一区二区三区视频| 欧美天堂视频| 亚洲欧美另类自拍| 亚洲男人第一av| 中文字幕免费一区| 亚洲自拍偷拍精品| 一区免费在线| 水蜜桃一区二区三区| 亚洲一区二区三区中文字幕在线观看| www.久久撸.com| 最近中文字幕在线观看视频| 亚洲精品一卡二卡| 受虐m奴xxx在线观看| 国产一区二区你懂的| 一区二区三区在线观看www| 69堂精品视频在线播放| 亚洲第一天堂av| 中文在线字幕av| 中文字幕免费在线观看视频一区| 黄色av电影网站| 毛片av一区二区| 中文字幕日韩一区二区三区| 老司机成人在线| 97国产精品视频人人做人人爱| 黄色a在线观看| 午夜视频在线观看一区二区三区 | 99精品国产91久久久久久| 午夜不卡福利视频| 亚洲国产精品成人| 欧美高清视频一区| 第四色在线一区二区| 91国产精品视频在线| 青青青草原在线| 欧美不卡一区二区三区四区| 日韩精品一区三区| 97se狠狠狠综合亚洲狠狠| 日韩高清在线一区二区| 国产精品vip| 一区二区三区三区在线| 国产伦精品一区二区三区视频 | 国产伦一区二区三区| 国产区欧美区日韩区| 亚洲黄色免费看| 伊人久久久久久久久久久| 五月婷婷伊人网| 日本丶国产丶欧美色综合| 午夜精品久久久久久久久久久久久蜜桃| 一区二区三区在线观看欧美| 日韩精品人妻中文字幕有码| 黄页网站大全一区二区| 亚洲精品无码国产| 国产精品嫩草影院在线看| 精品国产乱码久久久久久88av| eeuss国产一区二区三区四区| 91黄在线观看| 国产精一区二区| 亚洲精品免费av| 国产精品亚洲欧美一级在线 | 久久成人综合视频| 免费不卡视频| 久久精品视频在线| av黄色在线| 欧美激情欧美激情在线五月| 午夜性色福利视频| 日韩成人网免费视频| 中国一级片黄色一级片黄| 欧美在线综合视频| 久久久久香蕉视频| 亚洲国产日韩a在线播放性色| 九九热精品免费视频| 亚洲一区二区av电影| 美女100%露胸无遮挡| 成人性生交大片免费看视频在线| 深夜视频在线观看| va亚洲va日韩不卡在线观看| jizz日本免费| 亚洲国产精品精华液2区45| 萌白酱视频在线| 一区二区国产视频| 国产大屁股喷水视频在线观看| 国产精品不卡在线| 欧美成人免费看| 精品久久久久久亚洲国产300| 看黄色录像一级片| 亚洲精品一二三四区| 色婷婷在线观看视频| 欧美视频一区二区三区在线观看 | 久久精品国产久精国产爱| 中文字幕在线视频精品| 国产 日韩 欧美大片| 国产激情在线免费观看| 中文字幕一区二区三区四区不卡| 国产探花在线免费观看| 国产欧美日韩不卡| www.99re7| 欧美性猛交丰臀xxxxx网站| 国产一级视频在线观看| 日韩欧美在线免费| 国产精品国产三级国产普通话对白| 日韩欧美不卡在线观看视频| 一二三四区在线| 亚洲成人免费在线视频| 国产黄色片在线观看| 欧美老肥婆性猛交视频| 二区三区在线观看| 欧美日韩情趣电影| 伊人网综合在线| 精品盗摄一区二区三区| 999国产在线视频| 亚洲香蕉av在线一区二区三区| 调教视频免费在线观看| 最近中文字幕2019免费| xxx.xxx欧美| 91精品国产自产在线观看永久| 国产精品无码久久久久| 国产一区二区三区奇米久涩| 日韩欧美中文| 日韩欧美国产综合在线| 精品一区二区在线视频| 制服丝袜中文字幕第一页| 99在线热播精品免费| 免费在线观看h片| 欧美偷拍一区二区| 亚洲色偷精品一区二区三区| 欧美精品亚州精品| 另类一区二区| 欧美亚洲免费在线| 99国产成+人+综合+亚洲欧美| 欧美视频亚洲图片| 中文字幕av一区二区三区免费看 | 91黄色在线观看| 天天干天天摸天天操| 国产丝袜精品第一页| 宅男在线观看免费高清网站| 国产啪精品视频网站| 国产一区二区观看| 欧美视频第一区| 免费av成人在线| 四虎国产精品成人免费入口| 亚洲国产精品传媒在线观看| 久久精品视频1| 亚洲国产精品久久91精品| 日本乱理伦在线| 国产91精品黑色丝袜高跟鞋| 日本在线视频一区二区三区| 精品国产区在线| 欧美亚洲不卡| 激情六月丁香婷婷| www.色精品| 日产精品久久久久久久| 亚洲国产私拍精品国模在线观看| 成全电影大全在线观看| 亚洲xxxx做受欧美| 中文字幕一区二区三区在线视频 | 美女网站视频在线| 99久久国产免费免费| 欧美欧美天天天天操| 中文字幕一二三区| 久久无码av三级| 在线观看美女av| 黄色成人av网| 偷拍自拍在线| 日韩**中文字幕毛片| 国产精品视频一区二区三区综合 | 日本在线天堂| 91免费在线视频| 欧美三级午夜理伦三级小说| 亚洲春色在线视频| 热久久免费视频| sm捆绑调教视频| 日韩欧美在线观看一区二区三区| 亚洲91av| 国内精品久久国产| 久久一区精品| 成人在线观看小视频| 日韩精品一区二区三区swag | 国产精品成人免费电影| 成人在线免费观看网站| 天天av天天操| 精品久久久久久亚洲精品 | 久久中文字幕视频| 粉嫩久久久久久久极品| 国产一区亚洲二区三区| 成人在线视频一区| 欧美bbbbbbbbbbbb精品| 中文字幕亚洲综合久久| 国产免费不卡| 亚洲国产欧美不卡在线观看| 国产综合久久久久久鬼色| 国产真实夫妇交换视频| 国产一区二区免费| 国产午夜久久av| 国产精品沙发午睡系列| 国产精品不卡一区| 天堂网在线中文| 国产美女主播一区| 激情综合在线| 亚洲av成人无码久久精品| 日韩一区二区麻豆国产| 成人欧美magnet| 国产卡一卡二在线| 久久免费美女视频| 国产av无码专区亚洲av| 久久精品视频在线观看| 日韩精品a在线观看91| 北条麻妃在线视频观看| 不卡的av在线播放|