精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

国产亚洲精品美女久久久久久久久久| 成人ww免费完整版在线观看| 亚洲一区二区三区高清| 亚洲欧美激情视频| 欧美大尺度做爰床戏| 精品国产99久久久久久| 北岛玲一区二区三区四区| 91成人性视频| 神马久久精品综合| 日本天堂一区| 在线成人av影院| 欧美极品欧美精品欧美| 在线观看二区| av一区二区三区四区| 国产精品久久色| 一区视频免费观看| 国产成人高清| 亚洲第一精品福利| 在线视频一二区| 欧美日韩精品免费观看视完整| 亚洲欧洲www| 九色综合日本| 国内精品国产成人国产三级| 久久最新视频| 91精品国产91久久久久福利| 一区二区三区影视| 狠狠做六月爱婷婷综合aⅴ| 欧美大片拔萝卜| 奇米影音第四色| 午夜影院在线观看国产主播| 伊人开心综合网| 亚洲一区二区三区欧美| 日韩精品视频在线观看一区二区三区| 国产一区二区三区四区五区入口 | 色综合天天综合网国产成人综合天| 在线成人av电影| 91啦中文在线| 国产亚洲一二三区| 久久综合给合久久狠狠色| 99久久久无码国产精品免费| 七七婷婷婷婷精品国产| 日本最新高清不卡中文字幕| www.youjizz.com亚洲| 亚洲欧美网站在线观看| 一区二区三区回区在观看免费视频| 日本精品一二三区| 深夜激情久久| 欧美一区二区三区在| 日本美女视频一区| 国产精品麻豆| 欧美日韩一区二区三区不卡| 999在线免费视频| 浪潮色综合久久天堂| 91久久香蕉国产日韩欧美9色| 久久成人免费观看| 秋霞伦理一区| 欧美午夜精品久久久久久浪潮| 奇米影视亚洲色图| 国产在线88av| 婷婷夜色潮精品综合在线| www.日本在线播放| 少妇淫片在线影院| 日本国产一区二区| 天堂av在线网站| 日韩成人精品一区二区三区| 欧美日韩一级片网站| 911福利视频| 国产精品久久久久久久久久辛辛 | 国产精品第一页在线| 黄色av网站免费观看| 日精品一区二区| 国产专区欧美专区| 国产裸体无遮挡| 国产福利一区在线| 精品国产乱码久久久久软件| 亚洲 欧美 自拍偷拍| 2020日本不卡一区二区视频| 日本一区二区三区四区高清视频| 国产福利片在线| 亚洲欧洲成人精品av97| 久久亚洲国产成人精品无码区| 免费av不卡在线观看| 天天av天天翘天天综合网| 精品视频一区二区在线| 国产成人免费精品| 日韩欧美一区二区不卡| 人体私拍套图hdxxxx| 国产一区国产二区国产三区| 中文字幕欧美日韩精品| 免费看一级一片| 鲁大师成人一区二区三区| 国产97在线播放| 国产欧美第一页| 99在线精品视频| 少妇免费毛片久久久久久久久| 日本不卡三区| 亚洲mv大片欧洲mv大片精品| 欧美伦理视频在线观看| 日韩欧美中文字幕在线视频 | 魔女鞋交玉足榨精调教| 日本不卡免费一区| 久久久久久高潮国产精品视| 激情网站在线观看| 国产不卡一区视频| 日韩精品一区二区三区外面| 欧美24videosex性欧美| 在线观看视频一区二区 | 视频一区视频二区欧美| 亚洲人成在线观看| 久久视频免费看| 免费成人av资源网| 精品日韩电影| wwwav在线| 欧美日韩一区小说| 最新中文字幕视频| 亚洲视频中文| 亚洲伊人第一页| 国产黄在线播放| 精品久久在线播放| 少妇愉情理伦片bd| 日韩欧美伦理| 国产精品扒开腿做爽爽爽男男| 亚洲伦理在线观看| 亚洲图片欧美激情| 欧在线一二三四区| 欧美日韩精品一区二区三区在线观看| 久久综合免费视频| 影音先锋国产资源| 中文字幕av不卡| 人妻内射一区二区在线视频| 99精品中文字幕在线不卡| 操人视频在线观看欧美| 中文字幕观看视频| 日本一区二区在线不卡| 国产主播在线看| 女仆av观看一区| 国内偷自视频区视频综合| 国产精品国产一区二区三区四区 | 日韩视频在线观看国产| 一级毛片久久久| 日韩av影院在线观看| 日本三级黄色大片| 懂色av一区二区三区免费看| 青青视频免费在线观看| 亚洲精品aa| 日韩在线视频一区| 97人妻精品一区二区三区视频| 国产精品三级av在线播放| 精品久久久久久中文字幕2017| 中文字幕精品影院| 青青草成人在线| 精华区一区二区三区| 欧美性猛交xxxx黑人| 亚洲一级中文字幕| 玖玖在线精品| 日韩午夜视频在线观看| 欧美va在线| 最近2019免费中文字幕视频三 | 国产在线精彩视频| 亚洲美女视频网站| 国产精品自拍第一页| 国产精品久久久久影视| 中文字幕线观看| 欧美国产激情| 国产亚洲情侣一区二区无| 2020国产在线| 亚洲系列中文字幕| 91精品国产乱码久久久久| 亚洲男人的天堂av| 亚洲高清无码久久| 羞羞视频在线观看欧美| 欧美中日韩一区二区三区| 精品国产美女a久久9999| 在线精品高清中文字幕| 国产99对白在线播放| 亚洲国产综合视频在线观看| 成年人在线观看av| 免费在线视频一区| 欧美一二三不卡| 日韩中文av| 国产玖玖精品视频| 韩国日本一区| 国产亚洲精品va在线观看| 中文字幕一区二区三区四区免费看 | av黄色免费网站| 久久国产夜色精品鲁鲁99| 黄色一级大片免费| 国产成人手机高清在线观看网站| 国产精品一区二区久久国产| 午夜小视频福利在线观看| 国产丝袜高跟一区| 国产视频在线观看免费| 岛国av午夜精品| 国产精品国产三级国产传播| 99精品黄色片免费大全| 性猛交ⅹ×××乱大交| 亚洲调教视频在线观看| 五月天亚洲综合| 精品嫩草影院| 成人h视频在线| 正在播放日韩精品| 欧美成人精品xxx| 精品视频二区| 精品国产一区二区三区久久影院| 亚洲乱码国产乱码精品| 一区二区三区四区在线播放| 自拍偷拍亚洲天堂| 成人午夜看片网址| 精品亚洲视频在线| 久久一区国产| 黄页网站大全在线观看| 91超碰成人| 亚洲国产一区二区三区在线播| 成人资源在线| 91网站在线看| 91在线亚洲| 欧洲美女免费图片一区| 国精产品一区一区三区mba下载| 在线免费观看羞羞视频一区二区| 色欲久久久天天天综合网| 欧美久久一二三四区| 成人免费视频国产免费| 大伊人狠狠躁夜夜躁av一区| 日韩av女优在线观看| 亚洲欧美日韩中文播放| 纪美影视在线观看电视版使用方法| av亚洲精华国产精华| 色诱av手机版| 国产又粗又猛又爽又黄91精品| 乱子伦视频在线看| 亚洲欧美高清| 国产成人无码a区在线观看视频| 91成人精品视频| 熟妇熟女乱妇乱女网站| 三上亚洲一区二区| 欧美自拍资源在线| 国产成人高清| 日韩欧美精品在线不卡 | 国产三级中文字幕| 欧美丝袜激情| 香蕉久久夜色| 日韩欧美二区| 欧美h视频在线观看| 爽成人777777婷婷| 亚洲欧洲一区二区| 97在线精品| 久久久国产精华液999999| 久久久久国产精品| 视频一区二区视频| 欧美 亚欧 日韩视频在线 | 日韩一级黄色片| 国产美女免费视频| 日韩欧美国产午夜精品| 亚洲av无码乱码在线观看性色| 欧美一卡二卡在线观看| 精品国产乱码久久久久久蜜臀网站| 91精品国产高清一区二区三区蜜臀| 国产精品久久久久毛片| 欧美精品v日韩精品v韩国精品v| 91久久国语露脸精品国产高跟| 欧美剧在线免费观看网站| 国产免费一区二区三区免费视频| 日韩午夜激情电影| 欧美天堂在线视频| 亚洲美女又黄又爽在线观看| 777电影在线观看| 欧美超级免费视 在线| 欧美男男video| 秋霞午夜一区二区| 免费高清视频在线一区| 成人福利视频在线观看| 91精品短视频| 欧美自拍资源在线| 香蕉综合视频| 青青青国产在线观看| 丝袜美腿高跟呻吟高潮一区| 91女神在线观看| 粉嫩aⅴ一区二区三区四区 | 一区二区美女| 人人妻人人澡人人爽精品欧美一区 | 亚洲欧美在线一区| 日本综合在线| 午夜欧美不卡精品aaaaa| av亚洲一区| 国产精品有限公司| 精品国内自产拍在线观看视频| 一本色道久久99精品综合| 亚洲欧洲一级| 一道本在线免费视频| 国产成人亚洲综合a∨婷婷图片| 国产精品三级在线观看无码| 亚洲欧美中日韩| 国产精品一区二区6| 7777女厕盗摄久久久| 天堂91在线| 久久成人人人人精品欧| 成人欧美magnet| 亚洲已满18点击进入在线看片| 久久av影视| 久青草视频在线播放| 视频一区中文字幕| 制服丝袜在线第一页| 国产精品电影一区二区| 欧美不卡视频在线观看| 欧美巨大另类极品videosbest | 99久久激情| 欧美韩国日本在线| 国产成人精品影视| 美女三级黄色片| 色综合天天综合网天天看片| 亚洲av无码国产精品久久不卡 | 第一中文字幕在线| 91精品久久久久久久久久久久久| 日韩美女国产精品| 黄色三级中文字幕| 久久精品久久综合| a天堂中文字幕| 五月激情综合婷婷| 成人h动漫精品一区二区无码| 色av中文字幕一区| 偷拍精品精品一区二区三区| 成人h视频在线观看| 小处雏高清一区二区三区| 天天影视综合色| 久久亚洲春色中文字幕久久久| 精品无码黑人又粗又大又长| 欧美另类高清zo欧美| 大胆av不用播放器在线播放| 性色av一区二区咪爱| 澳门成人av| 久久这里只有精品18| 精品亚洲成a人| 992在线观看| 欧美手机在线视频| www.av在线播放| 国产激情综合五月久久| 国产成人av| 国产自偷自偷免费一区| 国产视频在线观看一区二区三区| 成人免费看片98欧美| 精品在线欧美视频| 亚洲三级欧美| 欧美连裤袜在线视频| 性8sex亚洲区入口| wwwwww日本| 色噜噜狠狠色综合中国| 黄网在线观看| 国产精品美女www| 成人亚洲一区二区| 日本中文字幕二区| 亚洲欧美电影院| 午夜老司机福利| 久久久久久久一| 欧美成a人免费观看久久| 日韩a在线播放| 欧美激情一区二区三区在线| 亚洲手机在线观看| 美女视频久久黄| 国产乱论精品| 国产精品无码专区av在线播放| 久久久99久久| 一区二区日韩视频| 欧美成人自拍视频| 女同一区二区三区| 天天操天天爽天天射| 亚洲视频一二区| 成人小说亚洲一区二区三区| 91高清视频免费观看| 欧美伦理影院| 五月天国产视频| 欧美日韩激情美女| 99视频在线观看地址| 91久久夜色精品国产网站| 亚洲成人中文| 五月天综合视频| 日韩一区二区三区电影| 91禁在线看| 亚洲一区二区自拍偷拍| 国产sm精品调教视频网站| 无码免费一区二区三区| 精品国产一区久久久| 精品国产一区二区三区不卡蜜臂 | 国产亚洲精品久久久久久777| 亚洲伊人伊成久久人综合网| 丁香婷婷综合激情| 国产午夜精品一区二区三区四区| 国产三级伦理片| 欧美中文字幕第一页| 国产精品91一区二区三区| 亚洲av成人片无码| 欧美日韩免费视频| sm在线播放| 国产又大又长又粗又黄| 91亚洲永久精品| 国产精品日韩无码| 欧美亚洲激情视频| 欧美午夜不卡影院在线观看完整版免费| 大地资源二中文在线影视观看| 欧美日韩国产精品自在自线| 98色花堂精品视频在线观看|