cscopeの使用(2)

4418 ワード

linuxソースコードは、cscopeインデックスファイルとtagsファイルを作成するmakeコマンドを提供します。
一、ソフトウェアのインストール
先にcscopeをインストールします
sudo apt-get install cscope
セットアップctags:http://ctags.sourceforge.net/使用できます。ctags–versionは現在のctagsのバージョンがemaacsのかどうかを確認します。emaacsをインストールしたら上の住所のctagsを使わなければなりません。vimはemaacsのctagsをサポートしていませんので、このctagsをダウンロードしてインストールして、ダウンロードしてからソースファイルの場所のディレクトリで実行します。
helight@helight-desktop:~/Desktop/ctags-5.7$  ./configure
helight@helight-desktop:~/Desktop/ctags-5.7$ make
ctagsファイルを作成し、このファイルを「/usr/bin/」ディレクトリに保存すればいいです。
二、インデックスファイルを生成する
ソースコードディレクトリの下で二つのコマンドを使ってcscopeインデックスファイルとtagsファイルを作成できます。
helight@helight-desktop:~/Downloads/linux-2.6.26$ make cscope
FILELST cscope.files
MAKE cscope.out
helight@helight-desktop:~/Downloads/linux-2.6.26$ make tags
MAKE tags
helight@helight-desktop:~/Downloads/linux-2.6.26$ ls tags -l
-rw-r–r– 1 helight ftp 69274841 2008-09-27 11:04 tags
helight@helight-desktop:~/Downloads/linux-2.6.26$ ls cscope.* -l
-rw-r–r– 1 helight ftp 23814144 2008-09-25 20:08 cscope.in.out
-rw-r–r– 1 helight ftp 609665 2008-09-25 20:06 cscope.list
-rw-r–r– 1 helight ftp 174470617 2008-09-25 20:08 cscope.out
-rw-r–r— 1 helight ftp 124973256 2008-09-25 20:08 cscope.po.out
 
三、一般ソースファイルからインデックスファイルを生成します。
使いやすいように、次のシナリオを作成してcscopeとctagsのインデックスファイルを更新しました。
#!/bin/sh
find . -name "*.h" -o -name "*.c" -o -name "*.cc" > cscope.files
cscope -bkq -i cscope.files
ctags -R
このコマンドは3つのファイルを生成します。cscope.out、cscope.in.out、cscope.po.out。cscope.outは基本的なシンボルインデックスであり、後の2つのファイルは「-q」オプションを使って生成され、cscopeのインデックス速度を速めることができる。このスクリプトは、まずfindコマンドを使用して、現在のディレクトリおよびサブディレクトリのすべての拡張子を「.h」、「.c」、「.c」という名前のファイルを検索し、検索結果をファイルcscope.filesにリダイレクトします。cscopeは、cscope.filesのすべてのファイルに基づいて、シンボルインデックスファイルを生成する。最後のコマンドは、ctagsコマンドを使用して、tagsファイルを作成し、vimで「help tags」コマンドを実行して、その使い方を調べます。それはcscopeと一緒に使うことができます。上で使用したコマンドパラメータは、-R:インデックスファイルを生成する際に、サブディレクトリツリーのコード-bを検索します。インデックスファイルだけを生成し、cscopeのインターフェース-qに入らないです。cscope.in.outとcscope.po.outファイルを生成し、cscopeのインデックス速度-k:インデックスファイルを生成する際に、cscopeのインデックスファイルを加速します。検索/usr/includeディレクトリ-i:ファイルリストを保存するファイル名がcscope.filesでない場合は、このオプションを追加してcscopeにソースファイルリストを探す場所を教えてください。標準入力でファイルリストを取得することを表す「-」を使用できます。I dir:は-Iオプションで指摘されたディレクトリの中でヘッダファイルを検索します。すべてのファイルをスキャンして、契約書と索引ファイルを再作成します。
VIMでcscopeを使って検索します。
1,cscope.outファイルをロードしてVIMでcscopeを使うのはとても簡単で、まず「cscope add」コマンドを呼び出してcscopeデータベースを追加して、その後「cscope find」コマンドを呼び出して検索することができます。VIMは8種類のcscopeの照会機能をサポートしています。例えば、私達はコードの中でwork()関数を呼び出す関数を探したいです。入力できます。「cs find c work」。車を返した後、マッチングの機能が見つからないことが分かりました。おそらくwork()を呼び出す機能がないかもしれません。私達は更に「cs find s work」を入力して、この記号の出現の位置を探して、今vimはこの記号の出現のすべての位置を並べました。文字列の検索もできます。二重引用符または単引用符で囲まれた内容で検索できます。正規表現も入力できます。これはegrepプログラムの機能と似ています。ソースコードのディレクトリでvimを開きます。cscopeを使って検索するにはcscope.outファイルをロードしなければなりません。vimコマンドラインで実行します。
:cs add cscope.out
vimコマンドの下で実行します。
:cs help
cscope commands:
add : Add a new database (Usage: add file|dir [pre-path] [flags])
find : Query for a pattern (Usage: find c|d|e|f|g|i|s|t name)
c: Find functions calling this function
d: Find functions called by this function
e: Find this egrep pattern
f: Find this file
g: Find this definition
i: Find files #including this file
s: Find this C symbol
t: Find assignments to
help : Show this message (Usage: help)
kill : Kill a connection (Usage: kill #)
reset: Reinit all connections (Usage: reset)
show : Show connections (Usage: show)
s:C言語記号、すなわち検索関数名、マクロ、列挙値などが現れるところg:検索関数、マクロ、列挙などが定義する位置、ctagsが提供する機能d:本関数が呼び出す関数cを検索します。指定された文字列e:検索egrepモードは、egrep機能に相当しますが、検索速度が速くなりました。f:検索してファイルを開きます。vimに似たfind機能i:本ファイルを含む文2を検索し、cscopeを使ってdo_を検索する。fork関数の定義:vimコマンドラインで実行します。
:cs f g do_fork
五、VIMではtagsを使って記号を検索します。
vimコマンドの下で実行します。
:tag xxx
探している関数やデータ構造、関数xxxを見つけます。tagsに関する他の用法はvimで実行できます。
六、他のコマンド紹介:
ctrl+):関数が呼び出されたところで関数が定義するところにジャンプします。ctrl+t:前の検索場所に戻ります。
七、特に注意:
生成されたcscope.outとtagsファイルはVIMのあるフォルダを開く必要があります。そうでないとVIMは関連符号情報を見つけることができません。