ソースコードのブラウジングにcscope

これまでPostgreSQLソースコードを読むのにEmacsとetagsの組み合わせを使っていたんですが、やはり関数の呼び出し元へジャンプできないのは辛いので別のツールを検討してみました。まず使ってみたのはglobal。ちょっと使ってみたかぎりでいえば悪くない。呼び出し元へジャンプできるのでetagsよりははるかに便利。しかし、cscopeというglobalよりも高機能らしいものがあることがわかったので、どうせならということでcscopeにのりかえることにしました。

このあたりを参考にしました。


こんな感じで設定しました。

(require 'xcscope)
MYPATH=/usr/local/src/postgresql-8.3.5/src/
cd /
find $MYPATH/include $MYPATH/interfaces $MYPATH/backend $MYPATH/port $MYPATH/bin -name "*.[chly]" -print | grep -v -e win32 -e /test -e _test >$MYPATH/cscope.files
  • cscope.filesからデータベース(インデックス)を作成
cd $MYPATH
cscope -b -q

以上で設定終わり。


emacsを立ち上げて関数にカーソルを合わせて C-c s d とすると定義へジャンプし、C-c s cとすると呼び出し元へジャンプします。C-c s cで開いたバッファの中の関数に合わせてC-c s cするとさらに呼び出し元へとたどれます。これは便利そう。

xcscope.el内のコメントがEmacsからcscopeを使う場合のドキュメントになっています。

追記
cscopeのバッファの中では、C-c s c としなくても c だけでさらに呼び出し元へジャンプできますね。M-x help-for-help b でバッファに割り当てられているバインディングを確認できます。