globalは、CやJavaのソースコードを解析して定義や参照をエディタから、たどれるようにしてくれます。
類似のツールでetagsやctagsがありサポートしている言語や使い方が微妙に違います。
インストール
$ sudo aptitude install global $
設定
タグ付け
対象となるソースコードをタグ付けします。
ソースが保存されているトップのディレクトリでgtagsコマンドを実行するだけで準備が整います。
$ ls linux-source-2.6.31 $ gtags -v [Sat Mar 06 03:25:55 JST 2010] Gtags started. Using default configuration. ...中略... [25025/25027] extracting tags of linux-source-2.6.31/fs/fat/dir.c [25026/25027] extracting tags of linux-source-2.6.31/fs/fat/namei_msdos.c [25027/25027] extracting tags of linux-source-2.6.31/fs/ioctl.c [Sat Mar 06 03:27:27 JST 2010] Done. $ ls GPATH GRTAGS GSYMS GTAGS linux-source-2.6.31 $
Linux 2.6.31のソースコードには、25,027のソースファイルがあり約5分ほどでタグ付けが終了します。
Gで始まるファイルが4つで来ますが、いずれもBerkeley DBです。
bashからの使い方
bash用のrcファイルが/etc/globash.rcにあるので、これを読み込ませてbashを起動します。
$ bash --rcfile /etc/globash.rc GloBash --- Global facility for Bash GloBash needs working directory. Create '~/.globash'? ([y]/n) Created. Welcome to Globash! When you need help, please type 'ghelp'. [~/work/linux]
x 定義名で定義されている場所が分かります。
mallocの定義されているのは、8箇所あります。
[~/work/linux] x malloc > 1 malloc 2060 linux-source-2.6.31/arch/frv/kernel/gdb-stub.c static void *malloc(size_t size) __maybe_unused; 2 malloc 217 linux-source-2.6.31/arch/powerpc/boot/ops.h static inline void *malloc(unsigned long size) 3 malloc 370 linux-source-2.6.31/drivers/scsi/aic7xxx/aic79xx_osm.h #define malloc(size, type, flags) kmalloc(size, flags) 4 malloc 375 linux-source-2.6.31/drivers/scsi/aic7xxx/aic7xxx_osm.h #define malloc(size, type, flags) kmalloc(size, flags) 5 malloc 23 linux-source-2.6.31/include/linux/decompress/mm.h static void *malloc(int size) 6 malloc 71 linux-source-2.6.31/include/linux/decompress/mm.h #define malloc(a) kmalloc(a, GFP_KERNEL) 7 malloc 241 linux-source-2.6.31/lib/inflate.c static void *malloc(int size) 8 malloc 269 linux-source-2.6.31/lib/inflate.c #define malloc(a) kmalloc(a, GFP_KERNEL) [~/work/linux]
The Linux KernelにLinuxカーネルについての詳しい解説があります。