emacs中etags等的使用

在windows下常用的源代碼查看工具是Source Inside。在linux下我習慣用用etags、gtags、grep來查看源代碼。

etags用於生成TAGS文件來提供emacs快速瀏覽C/C++源代碼,它的最大作用就是能夠快速跳轉到函數定義、宏定義、數據結構定義、全局變量定義等。
etags常常和find命令一同使用來生成TAGS文件,如下所示:

find . -name '*.[ch]' | xargs etags -a
etags常用命令:
M-visit-tags-table:選擇生成TAGS文件,
M-tags-reset-tags-tables:重新設置tag table
M-. 查找一個tag,比如函數定義類型定義等。
C-u M-. 查找下一個tag的位置
M-* 回到上一次運行M-.前的光標位置。

.emacs中加入這樣的語句:
(setq tags-file-name /usr/src/linux/TAGS")
這樣emacs就會自動讀取這個tags文件的內容。

對於一些project,makefile裏已經做好了這一步,例如對工程glibc,執行make -f MakeTAGS

有了etags,爲什麼還要gtags?
你可能會遇到這樣的情況:有一個函數myfunction,在工程的源代碼裏被調用了十幾次,你想把 它們都找出來,這時候,etags只能找到它的定義,並不能找到它的調用。而使用gtags就能夠實現這樣的功能(當然,還有很多的辦法)。
要使用gtags,首先要裝global包:
apt-get install global
接着在project是目錄下執行:
gtags
你會發現在當前目錄多了幾個文件:GPATH、GRTAGS、GSYMS、GTAGS。它們就是用於在源文件之間快速跳轉。
在emacs裏進入到gtags模式,執行“M-x gtags-mode”。
這樣就可以使用“gtags-find-pattern”和“gtags-find-symbol”來查找函數調用和聲明以及符號聲明。

cscope

cscope只針對C語言。

sudo apt-get install cscope

在.emacs里加入這一句:

(require 'xcscope)

在工程的目錄裏設置cscope的工作目錄,並在該目錄下生成cscope.file和scope.out文件:

M-x cscope-set-initial-directory

M-x cscope-create-list-of-files-to-index

好了,如果要找一個符號的定義,那麼就執行:

M-x cscope-find-global-definition

找調用某個函數的函數,執行:

M-x cscope-find-functions-calling-this-function

C-c s C-h 能找到更多關係cscope的命令。

grep也是一個很好的代碼查找工具。例如在一個工程裏查找函數名就schedule的函數的定義以及引用,

grep -n -e schedule -r --include=*.[hc] .

如圖所示:

使用grep查看源代碼

小結:
配合使用etags的“find-tag”(也就是M-.)命令和gtags的“gtags-find-symbol”命令、rgrep命令,能夠更方便、快捷地查找源代碼。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章