Linux源代码分析工具链

前言

看源代码是一个程序员必须经历的事情,也是可以提升能力的一个捷径。个人认为:要完全掌握一个软件的方法只有阅读源码。

在Windows下有sourcinsight这个源码阅读软件(虽然我没用过,但是网上评价还不错),由于我是个Linuxr,并不喜欢用Windows,所以自然是选择在Linux下阅读源码的工具了。

下面我将逐一介绍在Linux下阅读源码的工具。

vim+ctags+cscop

源码阅读三剑客:vim配合ctags和cscop,足以在源代码里面自由翱翔,在函数和变量间自由跳转。

安装

sudoapt-gtinstallvimctagscscop

vim

vim的使用就略过了,网上资料很多,不是一篇文章能说完的,未来我可能会写一篇vim的使用心得。推荐一篇简明Vim练级攻略(点击“阅读原文”,即可查看),看完就差不多会用了。

ctags

ctags的使用很简单,vim已经内置了对ctags的支持。

首先在源代码根目录执行ctags-R,递归的为源码建立tags,在根目录会生成一个Tags的文件,存放各种函数和变量的tag,便于跳转:

使光标在函数或变量上,Ctrl+]即可跳转到其定义处

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

对于简单的代码,ctags就够用了,但是对于比较复杂的代码来说,ctags显得有点力不从心,于是,下一位剑客就登场了。

cscop

vim同样内置了对cscop的支持。

首先在源代码根目录执行cscop-Rbq,就会生成cscop.out文件(索引数据库)

-R:在生成索引文件时,搜索子目录树中的代码

-b:只生成索引文件,不进入cscop的界面

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

然后在vim中执行:csaddcscop.out,添加数据库。

接下来就可以使用:csfindxvar进行查找。(x代表查询选项,var表示要查找的函数或变量名)

cscop支持8种查询方式

s:查找C语言符号,即查找函数名、宏、枚举值等出现的地方

g:查找函数、宏、枚举等定义的位置,类似ctags所提供的功能

d:查找本函数调用的函数

c:查找调用本函数的函数

t:查找指定的字符串

:查找grp模式,相当于grp功能,但查找速度快多了

f:查找并打开文件,类似vim的find功能

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

例如,我们想在vim7.0的源代码中查找调用do_cscop()函数的函数,我们可以输入:”:csfindcdo_cscop“,回车后发现没有找到匹配的功能,可能并没有函数调用do_cscop()。我们再输入”:csfindsdo_cscop“,查找这个C符号出现的位置,现在vim列出了这个符号出现的所有位置。

每次都有输入csfind来查找数据是不是有点麻烦,有没有更方便的方法呢。当然有,vim的神奇之处在其可定制性。提供一份cscop的配置,将其放在.vimrc中即可。

cscopstting

ifhas(cscop)

stcsprg=/usr/bin/cscop

stcsto=1

stcst

stnocsvrb

addanydatabasincurrntdirctory

iffilradabl(cscop.out)

csaddcscop.out

ndif

stcsvrb

ndif

nmapC-

s:csfindsC-R=xpand(cword)CRCR

nmapC-

g:csfindgC-R=xpand(cword)CRCR

nmapC-

c:csfindcC-R=xpand(cword)CRCR

nmapC-

t:csfindtC-R=xpand(cword)CRCR

nmapC-

:csfindC-R=xpand(cword)CRCR

nmapC-

f:csfindfC-R=xpand(cfil)CRCR

nmapC-

i:csfindi^C-R=xpand(cfil)CR$CR

nmapC-

d:csfinddC-R=xpand(cword)CRCR

上面的配置即把Ctrl+

作为:csfind的快捷键,也就是说要查找某个函数名,只需要把光标放在函数名上,按下Ctrl+

+s即可,简直不能更方便。而且你可以自己修改配置,映射到自己觉得舒服的快捷键上。

本着不重复造轮子的原则,我就简单的写了cscop的基本用法,其实基本上就够用了。

doxygn

上面我们讲的是用vim来查看源代码,但是面对几十万代码的时候,想要看清楚各个结构体之间的关系就不是vim能够做到的了。这时候我们就需要doxygn来帮手了。

DoxygnisthdfactostandardtoolforgnratingdocumntationfromannotatdC++sourcs,butitalsosupportsothrpopularprogramminglanguagssuchasC,Objctiv-C,C#,PHP,Java,Python,IDL(Corba,Microsoft,andUNO/OpnOfficflavors),Fortran,VHDL,Tcl,andtosomxtntD.

doxygn是一个根据源代码生成文档的工具,这货虽然主要是给C++用的,但是它也对其他语言有支持。

安装直接去







































海口白癜风专科医院
北京最佳白癜风医院



转载请注明:http://www.zjiaren.com/jbxx/11484.html