在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] .
如圖所示:
小結:配合使用etags的「find-tag」(也就是m-.)命令和gtags的「gtags-find-symbol」命令、rgrep命令,能夠更方便、快捷地查詢源**。
emacs的簡單使用
markdown 是一種輕量級標記語言,它允許人們使用易讀易寫的純文字格式編寫文件,然後轉換成格式豐富的html頁面。維基百科 使用簡單的符號標識不同的標題,將某些文字標記為粗體或者斜體,建立乙個鏈結等,詳細語法參考幫助?本編輯器支援markdown extra,擴充套件了很多好用的功能。具體請參考...
Cscope在emacs中的配置與使用
在windows下通常使用source insight閱讀源 本人希望將這項工作轉移到linux下面。在配置並試用vim一段時間後,感覺不是特別滿意。幸運的是,這個挑剔的人並不懶惰,開始嘗試使用強大的emacs。在這裡,並不介紹emacs的基本操作以及配置,建議學習emacs自帶的幫助或者閱讀 學習...
Emacs中巨集的基本使用方法
巨集,即macro,是文字編輯器中乙個非常廣泛的使用技巧。比如有下面一段文字,我們需要把前面的注釋 即 全部去掉,怎麼辦呢?require worklog setq worklog automatic login t add hook emacs startup hook function lamb...