GNU GLOBAL ソースコードタグシステム

来源:互联网 发布:天天电玩城源码 编辑:程序博客网 时间:2024/06/16 12:03

 

http://uguisu.skr.jp/Windows/gtags.html

 

 

GNU GLOBAL(gtags)は、ソースコードのタグジャンプです。簡単に複数のソース中から関数や、変数の定義元/参照元を見つけ、その箇所に移動することができます。

ctags、etags(cygwin や Linux に大抵標準で含まれています)と同じ働きをしますが、gtags はさらに強力な機能を持っています。大量の他人の書いたソースを読むプログラマには、必須だと思います。


GNU GLOBAL(gtags) の特徴

gtags は、次のような特徴を持っています。

  • C、 C++、 Yacc、 Java、 PHP4 のソースコードに対応しています。
  • 関数の呼び出し元を参照できます。
  • 複数の候補が存在する場合は、一覧で表示してくれます。
  • タグ情報より、HTMLを生成できます。
  • コマンドラインや、vi、emacs などで利用可能です。
  • GNU GLOBAL(gtags) : http://www.gnu.org/software/global/global.html

サイトの DownLoad のページより「global-x.x.x.tar.gz」をダウンロードしてください。

GNU GLOBAL(gtags) のインストール方法

通常のインストールと同様です。cygwin 上でも、最近のものを利用する場合は問題ありません。

  1. tar zxvf global-x.x.x.tar.gz(もしくは gzip -dc global-x.x.x.tar.gz | tar xv -)
  2. cd global-x.x.x
  3. ./configure (--prefix=任意の場所)
  4. make
  5. make install

なお、Cygwin の場合は、+Devel から、gcc, make を予めインストールしておいて下さい。

また、Cygwin の /usr/local/bin(例: C:/cygwin/usr/local/bin) にPATHを通しましょう。

「gtags.el」の移動

emacsを利用する場合は、任意のフォルダに global-x.x.x ディレクトリ内にある 「gtags.el」 をコピーしてください。

※ 「.emacs」に以下の一文を追加してください。(下記は「~/lisp」に「gtags.el」をコピーした場合です)

;; load-pathに追加(setq load-path (cons "~/lisp" load-path))

Meadowを利用する場合は、C:/Meadow/site-lisp ディレクトリに global-x.x.x ディレクトリ内にある 「gtags.el」 をコピーしてください。

「gtags.el」の移動

vi を利用する場合は、「$HOME/.vim/plugin」フォルダに 「gtags.vim」 をコピーしてください。

cp /usr/local/share/gtags/gtags.vim $HOME/.vim/plugin 

使用方法

プログラムソースのあるトップのディレクトリで、次のコマンドを入力します。

gtags -v

ファイル数によっては、かなりの時間を要します。

しばらくすると、「GPATH」「GRTAGS」「GSYMS」「GTAGS」のファイルが作成されます。

実際に利用したファイルサイズは、次のようなものです(ファイル数 152個)。

$ ls -lhtotal 4.0M-rw-r--r--   1 hoge なし  32K May  1 02:07 GPATH-rw-r--r--   1 hoge なし 2.6M May  1 02:07 GRTAGS-rw-r--r--   1 hoge なし 736K May  1 02:07 GSYMS-rw-r--r--   1 hoge なし 552K May  1 02:07 GTAGSdrwxr-xr-x+ 12 hoge なし    0 May  1 01:59 global-4.8.5/

また、HTML化は次のコマンドで可能です。

htags -saF

ただし、非常に大きなファイルとなり、時間もかかります。

emacs/Meadow 上での使用方法

emacs/Meadow を起動して、次のコマンドで gtags モードに変更できます。

M-x gtags-mode

このとき、「.emacs」に以下を追加しておけば、便利になります。

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; GNU GLOBAL(gtags);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;(autoload 'gtags-mode "gtags" "" t)(setq gtags-mode-hook      '(lambda ()         (local-set-key "/M-t" 'gtags-find-tag)         (local-set-key "/M-r" 'gtags-find-rtag)         (local-set-key "/M-s" 'gtags-find-symbol)         (local-set-key "/C-t" 'gtags-pop-stack)         ))
  • Ctrl+t gtagsでジャンプする一つ前の状態に戻る
  • Alt+s 指定した変数、定義の定義元を探す
  • Alt+r 指定した関数が参照されている部分を探す
  • Alt+t 指定した関数が定義されている部分をさがす

使い方は、ジャンプしたい関数上で、上記のコマンドを入力します。

なお、Cygwin+Meadow環境では、正しくソースの位置を表示してくれない問題があります。

次のように表示され、正しいソースのある場所を誤ってしまいます。

Use C-u M-x make-directory RET RET to create directory and its parents

Cygwin パスを理解させたいのであれば、次のElisp を利用して下さい。

  • cygwin-mount.el : http://www.emacswiki.org/elisp/cygwin-mount.el

ダウンロードした「cygwin-mount.el」は「C:/Meadow/site-lisp」に置きましょう。

また、「.emacs」に以下を追加しておきます。

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; cygwin-mount;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;(when (and (featurep 'meadow) (locate-library "cygwin-mount"))  (require 'cygwin-mount)  (cygwin-mount-activate))

vim 上での使用方法

:Gtags main

で global -t main を実行し、結果をエラーウィンドウで開く。

'-r' で参照元一覧をエラーウィンドウに表示

:Gtags -r func1

main.c 内のオブジェクト一覧

:Gtags -f main.c               <- locate objects in main.c

% や # も使える

:Gtags -f %                    <- locate objects in main.c

コマンドライン 上での使用方法

例えば、「grep」関数が、どのファイルで定義されているかは、次のように調べます。

$ global grepglobal-4.8.5/global/global.c        # grep() は global.c で定義されている

'-t' オプションで ctags フォーマット表示

$ global -t  helphelp    global-4.8.5/global/global.c    103help    global-4.8.5/gozilla/gozilla.c  76help    global-4.8.5/gtags-parser/gctags.c      132help    global-4.8.5/gtags/gtags.c      110help    global-4.8.5/htags/htags.c      256

'-r' オプションで参照元表示。help() は 次のファイルで参照されている。

$ global -r  helpglobal-4.8.5/global/global.cglobal-4.8.5/gozilla/gozilla.cglobal-4.8.5/gtags-parser/gctags.cglobal-4.8.5/gtags/gtags.cglobal-4.8.5/htags/htags.c

'-x' オプションで詳細表示

$ global -x  grepgrep              755 global-4.8.5/global/global.c grep(pattern)

'-a' オプションで絶対パス表示

$ global -a grep/home/hoge/global-4.8.5/global/global.c
global下载
http://www.gnu.org/software/global/
原创粉丝点击