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

Linux源代碼分析工具鏈介紹

系統 Linux 系統運維
看源代碼是一個程序員必須經歷的事情,也是可以提升能力的一個捷徑。個人認為:要完全掌握一個軟件的方法只有閱讀源碼。在Windows下有sourceinsight這個源碼閱讀軟件,由于我是個Linuxer,并不喜歡用Windows,所以自然是選擇在Linux下閱讀源碼的工具了。

前言

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

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

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

vim+ctags+cscope

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

安裝

  1. 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中即可。

  1. """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
  2. " cscope setting
  3. """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
  4. if has("cscope")
  5. set csprg=/usr/bin/cscope
  6. set csto=1
  7. set cst
  8. set nocsverb
  9. " add any database in current directory
  10. if filereadable("cscope.out")
  11. cs add cscope.out
  12. endif
  13. set csverb
  14. endif
  15.  
  16. nmap <C-@>s :cs find s <C-R>=expand("<cword>")<CR><CR>
  17. nmap <C-@>g :cs find g <C-R>=expand("<cword>")<CR><CR>
  18. nmap <C-@>c :cs find c <C-R>=expand("<cword>")<CR><CR>
  19. nmap <C-@>t :cs find t <C-R>=expand("<cword>")<CR><CR>
  20. nmap <C-@>e :cs find e <C-R>=expand("<cword>")<CR><CR>
  21. nmap <C-@>f :cs find f <C-R>=expand("<cfile>")<CR><CR>
  22. nmap <C-@>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>
  23. nmap <C-@>d :cs find d <C-R>=expand("<cword>")<CR><CR>

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

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

#p#

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,因為它不清楚你用的是什么語言(話說看一下后綴不就知道了嗎…)

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

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

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

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

[machine_class]

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

gdb

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

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

后記

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

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

責任編輯:火鳳凰 來源: ShareHub博客
相關推薦

2015-08-28 09:38:51

Linux源代碼分析工具

2021-10-01 12:17:30

Facebook開源工具Mariana Tre

2011-08-02 10:13:30

Java工具

2011-02-23 15:33:42

FileZilla

2011-02-23 14:26:28

FileZilla

2011-02-23 13:47:33

FileZilla

2011-02-23 15:26:01

FileZilla

2011-02-23 15:21:06

FileZilla

2011-02-23 15:11:27

FileZilla

2011-02-23 14:16:43

FileZilla

2011-02-23 14:54:58

FileZilla

2011-02-23 14:46:21

FileZilla

2011-02-23 14:39:27

FileZilla

2009-03-10 08:59:18

2010-03-18 14:46:18

Java SynDem

2010-01-26 13:14:48

2018-05-25 14:16:55

NFS源代碼線程

2010-02-24 16:14:26

Linux內存

2010-03-19 16:51:53

Java Socket

2021-07-07 05:53:23

PythonPython 語法加密源代碼
點贊
收藏

51CTO技術棧公眾號

yw.139尤物在线精品视频| 欧美亚洲高清一区| 久久日韩精品| 一区二区三区黄| 欧美视频久久| 亚洲欧洲日产国码av系列天堂| 五月天激情视频在线观看| 欧美黑人激情| 91麻豆swag| 91久久久久久久| 国产成人一级片| 亚洲激情中文在线| 亚洲免费一在线| 日韩高清在线一区二区| 中文字幕在线直播| 夜夜嗨av一区二区三区中文字幕| 久久久久久九九九九| 国产视频第一页| 日韩在线卡一卡二| 久久久亚洲成人| 青青操在线视频观看| 色老板在线视频一区二区| 欧美一区二区三区小说| 免费观看成人在线视频| av中文资源在线资源免费观看| 国产精品美女一区二区在线观看| 久久亚洲高清| 丰满熟妇人妻中文字幕| 精品亚洲porn| 国产欧美日韩精品在线观看| www欧美在线| 激情欧美国产欧美| 欧美老女人性生活| 日本视频在线免费| 精品午夜久久| 亚洲午夜精品久久久久久性色 | 91在线观看视频| 97免费资源站| 国产精品国产三级国产aⅴ| 日本最新不卡在线| 国产suv精品一区二区| 婷婷激情五月网| 国产精品久久久久久久久久妞妞| 久久久久久国产精品| 欧美黄色免费看| 在线精品国产| 欧美成人免费播放| 欧美黄色aaa| 欧美人成在线| 欧美激情啊啊啊| 黄色一级视频免费| 亚洲网站视频| 97视频色精品| 五月天激情国产综合婷婷婷| 国产欧美亚洲一区| 奇米一区二区三区四区久久| 中文字幕视频网站| 视频一区国产视频| 国产精品视频最多的网站| 欧美 亚洲 另类 激情 另类 | 黑人性生活视频| 日韩激情欧美| 亚洲福利在线看| 欧美无人区码suv| 一区三区在线欧| 国产亚洲xxx| 国产精品18在线| 亚洲女同中文字幕| 色综合久久中文字幕综合网小说| 黄色一级片在线| 国产欧美日韩一级| 国产精品日韩在线| 精品国自产拍在线观看| 成人小视频免费观看| 久久66热这里只有精品| 国模吧精品人体gogo| 国产精品久99| 久久精品xxx| 中文字幕在线官网| 欧美理论片在线| 丰满人妻一区二区三区免费视频棣| 日韩激情啪啪| y97精品国产97久久久久久| 欧美日韩国产精品一区二区三区| 亚洲在线视频| 成人国内精品久久久久一区| 高h调教冰块play男男双性文| 久久综合久久99| 伊人久久大香线蕉精品| av电影在线免费| 欧洲亚洲国产日韩| 免费观看黄网站| 美女久久久久| 久久天天躁夜夜躁狠狠躁2022| 日本熟妇毛耸耸xxxxxx| 免费av网站大全久久| 国产高清精品一区| 成人亚洲综合天堂| 亚洲国产日韩在线一区模特| 亚洲男人天堂色| 9l亚洲国产成人精品一区二三| 亚洲香蕉成人av网站在线观看 | 中文国产一区| 国产欧美在线视频| 亚洲日本香蕉视频| 亚洲品质自拍视频| 成人性生生活性生交12| 高清一区二区三区| xxav国产精品美女主播| 六月丁香婷婷综合| 高清视频一区二区| 亚洲一区二区三区午夜| 香蕉伊大人中文在线观看| 3d成人h动漫网站入口| 成年人网站免费看| 韩日欧美一区| 91精品在线观| 日韩免费网站| 欧美在线啊v一区| 日韩 中文字幕| 激情婷婷欧美| 97久久精品午夜一区二区| 欧美一区二区三区| 欧美亚洲一区二区三区四区| 国产精品嫩草av| 亚洲一级二级| 99re视频在线| caoporn免费在线视频| 欧美午夜精品一区二区蜜桃| 国产精品揄拍100视频| 亚洲美女一区| 国产经品一区二区| 一区二区三区伦理| 4438亚洲最大| 伊人久久久久久久久久久久久久| 丝瓜av网站精品一区二区 | xxxx国产视频| 欧美va亚洲va日韩∨a综合色| 国产欧美一区二区三区四区| 成人免费视频| 欧美性三三影院| 性猛交娇小69hd| 日韩在线一区二区| 亚洲精品高清视频| 久久久加勒比| 久久综合免费视频影院| 国产精品久久久久久久久久久久久久久久久久 | 9l亚洲国产成人精品一区二三 | 国产成人高清在线| 黄色三级中文字幕| www.久久东京| 55夜色66夜色国产精品视频 | 极品束缚调教一区二区网站| 久久久久国产视频| 手机看片一区二区| 精品国产户外野外| 国产精品毛片一区二区| 青青草97国产精品免费观看| 一本一道久久a久久综合精品 | 国产精品福利视频| 9999精品成人免费毛片在线看| 亚洲а∨天堂久久精品喷水| www.中文字幕在线观看| 国产欧美日韩视频在线观看| 久久国产精品国产精品| 亚洲五月综合| 久久国产精品 国产精品| 亚洲伊人av| 色综合伊人色综合网| 国产av无码专区亚洲a∨毛片| 亚洲制服丝袜一区| 亚洲av无码一区二区二三区| 蜜桃视频在线一区| 成人小视频在线观看免费| 狼人精品一区二区三区在线| 国产91亚洲精品| av网站导航在线观看免费| 亚洲第一福利在线观看| 成人免费视频国产免费| 中文字幕一区二区三区在线不卡 | 精品少妇一区二区30p| 日韩永久免费视频| 在线观看日韩av先锋影音电影院| 日本黄色录像视频| 不卡的av中国片| 成 人 黄 色 小说网站 s色| 亚洲无线一线二线三线区别av| 免费av在线一区二区| 日本一区二区中文字幕| 性色av香蕉一区二区| 8888四色奇米在线观看| 精品久久久久久无| 中文天堂在线播放| 午夜久久久久久久久久一区二区| 国产jjizz一区二区三区视频| 国产成人精品www牛牛影视| 五月婷婷深爱五月| 欧美国产三级| 一本久道久久综合| 日本亚洲不卡| 99精品国产高清一区二区| 欧美国产大片| 欧美激情一二三| 色大18成网站www在线观看| 亚洲国产日韩欧美在线99| 亚洲影院一区二区三区| 欧美午夜女人视频在线| 免费一级肉体全黄毛片| 国产精品久久久爽爽爽麻豆色哟哟| 国产伦精品一区二区免费| 国产综合色在线视频区| 亚洲精品一二三四五区| 亚洲欧洲日本一区二区三区| 免费看av软件| 久久婷婷蜜乳一本欲蜜臀| 蜜桃导航-精品导航| 国产精品一区二区三区美女| 亚洲综合国产精品| 成人黄色免费网站| 国产91色在线免费| 蜜桃视频m3u8在线观看| 久久久久久久久久久av| 九色porny在线| 最近2019中文字幕mv免费看| 黄色av网址在线免费观看| 亚洲韩国青草视频| 国产91免费看| 日韩视频在线永久播放| 国产视频一区二区三| 欧美日韩精品综合在线| 日韩av免费播放| 色94色欧美sute亚洲线路一ni | 国产精品嫩草99av在线| 霍思燕三级露全乳照| 欧美私人啪啪vps| 成年人深夜视频| 午夜国产精品视频| 六月婷婷激情网| 欧美有码视频| 屁屁影院ccyy国产第一页| 亚洲一区 二区 三区| 99中文字幕在线观看| 亚洲一本二本| 男人添女人下部视频免费| 狠狠入ady亚洲精品| 天堂…中文在线最新版在线| 亚洲精品系列| 黄色一级片播放| 亚洲欧美日韩精品一区二区 | **国产精品| 91九色国产视频| 天堂av一区| 国产一区免费视频| 日韩欧美黄色| 日韩亚洲欧美精品| 99精品电影| 中国女人做爰视频| 雨宫琴音一区二区在线| 国模无码视频一区二区三区| 爽爽淫人综合网网站 | 成人av网址在线| 91精品国产自产| 国产人妖乱国产精品人妖| 貂蝉被到爽流白浆在线观看| 亚洲欧洲精品成人久久奇米网| 在线免费观看亚洲视频| 亚洲成a人在线观看| 国产性猛交╳xxx乱大交| 欧洲一区二区av| 99热这里只有精| 日韩成人在线免费观看| 国产福利在线观看| 欧美猛少妇色xxxxx| 人狥杂交一区欧美二区| 国产精品亚洲自拍| 成人av资源网址| 欧美一区二区三区四区夜夜大片 | 要久久爱电视剧全集完整观看| 欧美一区二区在线| 91超碰成人| 青青草成人免费在线视频| 日韩成人dvd| 无码人妻少妇色欲av一区二区| 9i在线看片成人免费| 少妇av片在线观看| 亚洲午夜久久久久久久久久久| 亚洲毛片一区二区三区| 欧美一区二区精品在线| 欧美777四色影视在线| 美女精品久久久| 日韩免费电影| 国产精品美女xx| 久久精品国产亚洲夜色av网站| av在线观看地址| 日本欧美一区二区三区乱码| 91亚洲一线产区二线产区| 中文字幕巨乱亚洲| 日产精品久久久| 欧美一区二区三区视频在线| 久久久久久久影视| 国内揄拍国内精品| 成人污污www网站免费丝瓜| 免费不卡亚洲欧美| 国产精品99一区二区| 久热精品在线播放| 91在线国内视频| 日韩激情一区二区三区| 7777精品伊人久久久大香线蕉的 | 亚洲综合激情在线| 亚洲一区二区三区四区五区xx| 国产成人aaaa| www.5588.com毛片| 欧美视频精品在线观看| 午夜福利视频一区二区| 欧美日本亚洲视频| 欧美aaaaaa| 日韩av图片| 国产情侣久久| 一级黄色片毛片| 亚洲综合另类小说| a级片免费观看| 日韩中文字幕在线播放| 日韩一区精品| 日韩国产欧美精品| 老司机午夜精品视频| 三级黄色片网站| 精品久久久久久中文字幕| 成人乱码一区二区三区 | 国产精品原创巨作av| 国产精品一区二区亚洲| 91成人在线精品| 久久伊伊香蕉| 国产成人精品在线观看| 台湾亚洲精品一区二区tv| 日韩精品―中文字幕| 99久久99久久精品国产片果冻 | 国产一区免费视频| 99精品国产在热久久下载| 日本精品一二三| 亚洲一区二区欧美激情| 亚洲精品国产一区二| 欧美高清第一页| 精品嫩草影院| 青青青国产在线观看| 91香蕉视频黄| www.com亚洲| 中文字幕亚洲综合久久| 狂野欧美性猛交xxxx| 中文字幕中文字幕一区三区| 激情图区综合网| 精国产品一区二区三区a片| 欧美变态tickle挠乳网站| 成人免费一区二区三区牛牛| 国产在线精品一区二区中文 | 欧美最顶级丰满的aⅴ艳星| 香蕉人人精品| 天堂社区在线视频| 1区2区3区欧美| www.久久久久久| 91国语精品自产拍在线观看性色| 免费成人av| 天堂av8在线| 亚洲自拍偷拍av| 日本一区视频| 国产精品日日摸夜夜添夜夜av| 9191国语精品高清在线| 一级黄色片毛片| 欧美在线观看视频一区二区三区 | 亚洲精品日韩一| 囯产精品久久久久久| 欧美孕妇与黑人孕交| 日韩精品不卡一区二区| 免费观看黄网站| 黑人巨大精品欧美一区二区免费| 福利视频在线导航| 91久久国产综合久久蜜月精品| 亚洲国产免费看| 日本乱子伦xxxx| 欧美一级xxx| 波多野结衣亚洲| 中文字幕超清在线免费观看| av亚洲精华国产精华精华| 69视频免费看| 欧美肥臀大乳一区二区免费视频| 色婷婷综合久久久久久| 我要看一级黄色大片| 亚洲国产成人tv| 日本激情在线观看| 激情视频一区二区| 麻豆成人91精品二区三区| 日本三级视频在线| 色yeye香蕉凹凸一区二区av| 国产精品一区二区中文字幕| 亚洲高清在线免费观看| 亚洲一区二区视频在线| 91在线看黄| 免费在线一区二区| 丁香天五香天堂综合| 亚洲一卡二卡在线| 青草热久免费精品视频|