linux

globalはソースコードを読むためのツール

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カーネルについての詳しい解説があります。

タイトルとURLをコピーしました