天天看點

《深入分析GCC 》——第2章 GCC源代碼分析工具2.1 vim+ctags代碼閱讀工具

本節書摘來自華章出版社《深入分析gcc 》一書中的第1章,第2.1節,作者 王亞剛 ,更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。

gcc源代碼分析工具

代碼分析是一件煩瑣的事情。在分析gcc源代碼時,幾乎所有的人都會說:“這麼多的代碼,怎麼看?”是的,面對gcc 4.4.0如此龐大的代碼量,原始的、徒手的做法顯然是不足以應付的。在閱讀gcc代碼時,通常遇到的典型問題包括:

(1)如何跟蹤函數調用;

(2)如何檢視一個變量的定義;

(3)如何檢視一個函數被哪些函數調用過;

(4)如何分析函數之間的調用關系;

(5)如何了解某個函數的工作過程。

當然,除了了解這些表面的問題,更深層的問題就是gcc到底是如何設計的?gcc這麼龐大的代碼是如何組織的?gcc在進行源代碼編譯的過程中都包括哪些主要的處理階段,每個階段完成了哪些工作,這些階段之間又是如何互相聯系起來的?

這些問題的回答,都需要對gcc的代碼進行詳細分析。筆者認為,沒有好的工具作為輔助,分析gcc代碼幾乎是不可能的!本章主要介紹一些作者在分析gcc 4.4.0代碼時所使用的一些常用工具,供大家參考。這部分内容僅僅是點到為止,詳細内容請參閱其使用者文檔。

本書介紹的所有代碼分析工具均基于centos linux系統。

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程式。

<code>[root@localhost ~]# sudo yum install ctags</code>

(2)使用wget工具從gcc源代碼的鏡像站點下載下傳gcc 4.4.0的源代碼檔案。

(3)使用tar工具對源代碼進行解壓。

<code>[gcc@localhost vim-ctags]$ tar xjvf gcc-4.4.0.tar.bz2</code>

(4)進入gcc-4.4.0目錄,運作ctags,生成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}目錄中。

系統顯示如圖2-1所示。

顯然,在該檔案中,讀者感興趣的是main函數中調用的toplev_main函數的實作。此時,隻需要将光标移動到toplev_main函數名稱上,并按ctrl+]組合鍵,此時vim會根據tags中提供的資訊,自動打開函數toplev_main所在的檔案gcc/toplev.c,并且讓光标停留在該函數的開始,如圖2-2所示。

在分析了toplev_main函數的實作過程後,如果需要回到main函數處,隻需要按ctrl+o組合鍵即可。

當然,對于代碼中所有的變量聲明、類型聲明、函數名稱等标簽,均可以使用上述方法快速檢視其定義及實作,避免了分析源代碼中繁重的搜尋工作,極大地提高了代碼閱讀和分析的效率。

 

《深入分析GCC 》——第2章 GCC源代碼分析工具2.1 vim+ctags代碼閱讀工具

繼續閱讀