secretbase.log

コードはすべてNYSLです

ソースコードを読むときに捗る3つの方法

どこかからダウンロードしてきたコードや、なにかのプロジェクトに参加し誰かのコードを読む。
ソースコードを読むということはよくありますよね。なにかの関数や変数がコード上のどこにあるか、どこで参照しているか知りたい。そんなときに使える方法です。


1. find と grep を組み合わせて使う方法

原始的な find を grep を使う方法です。
前はよく使っていましたが、たいていの環境で使えますので覚えておいて損はないです。

C言語の場合
 $ find . -name "*.[ch]" | xargs grep hogehoge

拡張子 c または h のファイルを検索し、 grep で hogehoge という symbol
検索します。

C++ の場合

拡張子が cpp なので、

 $ find . -name \*.cpp -or -name \*.h  | xargs grep hogehoge

cpp または h 拡張子のコードから hogehoge を検索します。 -or という使い方を知らなかったので助かりました。


2. GNU global を使う方法

GNU global は、ソースコードの関数や変数のタグをつけるプログラムです。
linuxPOSIX準拠システムで使えます。
機能は豊富でクロスリファレンスを html を吐き出したり、 Emacsvim と連携したりもできます。
ここではコマンドラインで調べる方法を説明します。

インストール

Ubuntu では、

$ sudo apt-get install global 

cygwin では、
ソースコード( http://www.gnu.org/software/global/download.html )からビルドするといけます。

準備
$ cd ソースコードのあるディレクトリ
$ gtags -v

v オプションは処理中の画面を出力するだけですのでなくてもOK

使い方
$ global hogehoge

でhogehogeの定義箇所を検索

$ global -r hogehoge

で呼び出し箇所を検索


3. git grep を使う方法

git という分散バージョン管理システムを使います。ここでは検索のために使用しますので別のバージョン管理を使っていても大丈夫です。

インストール

ubuntu 11.04 の場合は、 git というパッケージ名です。
(ubuntu の場合のパッケージ名は、昔は、git-core でした)

$ sudo apt-get install git
gitへの登録

下記コマンドだけ覚えておけば git 自体は知らなくても使えます。

 $ cd ソースファイルのあるディレクトリ
 $ git init
 $ git add .
調べかた
 $ git grep main -- *.cpp

とか

 $ git grep -e "#if" --and "_WIN32" -- *.cpp -- *.h 

といった感じで使えます。

また、該当ディレクトリに移動して、gitp grep すればその配下が検索対象になります。


快適にコードを読みましょう〜。