深入分析GCC
上QQ阅读APP看书,第一时间看更新

2.1 vim+ctags代码阅读工具

vim是Linux中应用最广泛的编辑器,也是阅读GCC 4.4.0源代码的首选工具。ctags是一种标签工具,可以配合vim编辑器,帮助用户很方便地实现代码中的符号跟踪。

下面简单介绍使用vim + ctags对GCC 4.4.0源代码分析的过程。为了描述方便,全书使用${GCC_SOURCE}来表示GCC 4.4.0代码所在的顶层目录。

(1)使用yum工具安装ctags程序。

             [root@localhost ~]# sudo yum install ctags

(2)使用wget工具从GCC源代码的镜像站点下载GCC 4.4.0的源代码文件。

                 [GCC@localhost  ~]$  wget  -c  http://mirror1.babylon.network/gcc/releases/gcc-
             4.4.0/gcc-4.4.0.tar.bz2
                 --2015-05-19  10:06:52--     http://mirror1.babylon.network/gcc/releases/gcc-4.4.0/
             gcc-4.4.0.tar.bz2
                 Resolving mirror1.babylon.network... 5.135.162.176, 2001:41d0:8:e5b0::1
                 Connecting to mirror1.babylon.network|5.135.162.176|:80... connected.
                 HTTP request sent, awaiting response... 200 OK
                 Length: 62708198 (60M) [application/octet-stream]
                 Saving to:“gcc-4.4.0.tar.bz2”
                 100%[======================================>] 62,708,198    211K/s    in 4m 51s
                 2015-05-19 10:11:45 (210 KB/s) -“gcc-4.4.0.tar.bz2”saved [62708198/62708198]

(3)使用tar工具对源代码进行解压。

                 [GCC@localhost vim-ctags]$ tar xjvf gcc-4.4.0.tar.bz2

(4)进入gcc-4.4.0目录,运行ctags,生成tags文件。

                 [GCC@localhost vim-ctags]$ cd gcc-4.4.0
                 [GCC@localhost gcc-4.4.0]$ ctags -R
                 [GCC@localhost gcc-4.4.0]$ ls -l tags
                 -rw-rw-r--. 1 GCC GCC 52296910 May 19 10:14 tags

可以看出,生成的tags文件的大小为52 296 910字节,包含的tags信息非常多,有兴趣的读者可以使用文本工具打开该tags文件,查看其中的内容。

(5)使用vim查看GCC 4.4.0源代码。

在查看源代码时,需要先对代码的结构进行大致了解,从合适的入口开始分析。一般来讲,按照程序的执行流程来分析代码的结构及其运行过程是一个不错的选择,因此,笔者选择从${GCC_SOURCE}/gcc/main.c文件入手,使用vim来查看该文件。

这里需要特别说明的是,执行vim命令时的当前工作目录应该和tags文件所在的目录相同,这样才能在vim中使用tags文件。上面执行ctags命令产生的tags文件在${GCC_SOURCE}目录中,因此,运行vim时,当前工作目录应该切换到${GCC_SOURCE}目录中。

                 [GCC@localhost vim-ctags]$ cd gcc-4.4.0
                 [GCC@localhost gcc-4.4.0]$ vim gcc/main.c

系统显示如图2-1所示。

图2-1 使用vim编辑查看文件

显然,在该文件中,读者感兴趣的是main函数中调用的toplev_main函数的实现。此时,只需要将光标移动到toplev_main函数名称上,并按Ctrl+]组合键,此时vim会根据tags中提供的信息,自动打开函数toplev_main所在的文件gcc/toplev.c,并且让光标停留在该函数的开始,如图2-2所示。

图2-2 vim中利用tags跳转到函数实现

在分析了toplev_main函数的实现过程后,如果需要回到main函数处,只需要按Ctrl+O组合键即可。

当然,对于代码中所有的变量声明、类型声明、函数名称等标签,均可以使用上述方法快速查看其定义及实现,避免了分析源代码中繁重的搜索工作,极大地提高了代码阅读和分析的效率。