Oracle Solaris Studio 12.4 Man Pages

印刷ビューの終了

更新: January 2015
 
 

cscope(1)

名前

cscope - 対話形式で C プログラムを検査する

形式

cscope [options] files...

説明

cscope は、コードの特定の要素について C 言語のソースファイルを検査できるようにする、対話型の画面指向ツールです。

デフォルトでは、cscope は現在のディレクトリに存在する C (.c.h)、lex (.l)、および yacc (.y) のソースファイルを検査します。また、コマンド行でソースファイルの名前を指定して cscope を呼び出すこともできます。どちらの場合でも、cscope では、現在のディレクトリで見つからない #include ファイルは標準のディレクトリで検索されます。cscope はシンボル相互参照 (デフォルトでは cscope.out) を使って、ファイル内の関数、関数呼び出し、マクロ、変数、プリプロセッサシンボルの場所を突き止めます。

検査対象のプログラムを構成するソースファイルに対してはじめて使用されたとき、cscope はシンボル相互参照を作成します。それ以降の呼び出しでは、ソースファイルの内容が変更されているか、または指定されたソースファイルが異なっている場合にかぎり、cscope は相互参照を再作成します。相互参照を再作成する場合は、変更がないファイルのデータは古い相互参照からコピーされるため、再作成は初期作成よりも高速になります。

オプション

次のオプションを自由に組み合わせることができます。

-b

相互参照の作成だけを行います。

-C

検索時に大文字/小文字を無視します。

-c

相互参照ファイルで ASCII 文字だけを使用します。すなわち、データを圧縮しません。

-d

相互参照を更新しません。

-e

ファイルとファイルの間に現れる ^e コマンドプロンプトを抑止します。

-f reffile

相互参照ファイルの名前として、デフォルトの cscope.out の代わりに reffile を使用します。

-I incdir

#include ファイルの名前が / で始まっておらず、コマンド行にも下記の namefile にも指定されていない場合に、ヘッダーファイルの標準の格納場所 (通常は /usr/include) で探す前に、incdir で探します。(#include ファイルは二重引用符と山括弧のどちらでも指定できます。)現在のディレクトリ (最初に検索) と標準のリスト (最後に検索) に加え、incdir ディレクトリが検索されます。複数の -I オプションを指定した場合、ディレクトリはコマンド行に現れた順に検索されます。

-i namefile

デフォルトの cscope.files の代わりに、namefile に指定した名前のソースファイルすべてを検査します (ファイル名はスペース、タブ、または復帰改行で区切ります)。このオプションが指定された場合、cscope はコマンド行で指定されたすべてのファイルを無視します。

-L

-num pattern オプションとともに使用すると、1 回の検索を行なって行指向の出力を生成します。

-l

行指向インタフェース (後述の「行指向インタフェース」を参照)。

-num pattern

入力フィールド num (0 からカウントする) に進み、pattern を検索します。

-P path

作成済みの相互参照ファイルに現れる相対ファイル名の前に path を付加することにより、その相互参照ファイルが作成されたディレクトリに移動しなくてもすむようにします。このオプションは、-d オプションとともに使用する場合にのみ有効です。

-p n

ファイルパスの最後の n 個 (デフォルトの 1 個ではなく) のコンポーネントを表示します。ファイル名をまったく表示しない場合は 0 を使用してください。

-s dir

追加のソースファイルを dir で探します。コマンド行でソースファイルを指定した場合、このオプションは無視されます。

-T

C のシンボルと照合するときに先頭の 8 文字だけを使用します。ピリオド (.) 以外の特殊文字を含む正規表現は、その最短の長さが 8 文字より長いときにはどのシンボルとも一致しません。

-U

ファイルのタイムスタンプをチェックしません (どのファイルにも変更がないと見なします)。

-u

相互参照ファイルを無条件に作成します (すべてのファイルが変更されていると見なします)。

-V

画面の最初の行に cscope のバージョン番号を出力します。

-I-p、および -T オプションは、cscope.files ファイルの中にも置くことができます。

使用法

初期検索の要求

相互参照の準備が完了すると、cscope は次のメニューを表示します。

Find this C symbol:
Find this global definition:
Find functions called by this function:
Find functions calling this function:
Find this text string:
Change this text string:
Find this egrep pattern:
Find this file:
Find files #including this file:

TAB キーを繰り返し押して希望する入力フィールドに移動し、検索するテキストを入力して RETURN キーを押してください。

後続の要求の発行

検索が正常に行われると、次のいずれかの 1 文字コマンドを使用できます。

1-9

該当する行番号によって参照されるファイルを編集します。

SPACE

次の一連の一致する行を表示します。

+

次の一連の一致する行を表示します。

-

前の一連の一致する行を表示します。

^e

表示されたファイルを順番に編集します。

>

表示された行のリストをファイルに追加します。

|

全行をパイプでシェルコマンドに渡す

また、次の 1 文字コマンドはいつでも使用できます。

TAB

次の入力フィールドに移動します。

RETURN

次の入力フィールドに移動します。

^n

次の入力フィールドに移動します。

^p

前の入力フィールドに移動します。

^y

最後に入力したテキストを検索する

^b

前の入力フィールドに移動し、パターンを検索します。

^f

次の入力フィールドに移動し、パターンを検索します。

^c

検索時に大文字と小文字を区別するか否かのトグルスイッチ(大文字/小文字を無視する場合、FILE を検索すると Filefile に一致します。)

^r

相互参照を再作成します。

!

対話型シェルを起動します (cscope に戻るには、^d と入力します)。

^l

画面を描画し直します。

?

cscope のコマンドに関するヘルプ情報を表示します。

^d

cscope を終了します。

注意: 検索対象のテキストの最初の文字が上記のコマンドのいずれかに一致するときは、その前で \ (バックスラッシュ) を入力してエスケープしてください。

新しいテキストによる古いテキストの置換

cscope では、変更対象のテキストを入力したあと、新しいテキストを入力するように求められ、古いテキストを含む行が表示されます。次の 1 文字コマンドを使用して、変更する行を選択してください。

1-9

変更対象の行をマークしたり、マークを削除する

*

すべての表示行を変更対象としてマークしたり、マークを削除する

SPACE

次の一連の行を表示します。

+

次の一連の行を表示します。

-

前の一連の行を表示します。

a

すべての行を変更対象としてマークする

^d

マークされた行を変更して終了する

ESCAPE

マークされた行を変更しないで終了する

!

対話型シェルを起動します (cscope に戻るには、^d と入力します)。

^l

画面を描画し直します。

?

cscope のコマンドに関するヘルプ情報を表示します。

特殊キー

使用している端末に vi(1) 上で機能する矢印キーがある場合は、それらを使って入力フィールドの間を移動できます。1 つ前の入力フィールドに移動する場合は、TAB キーを繰り返し押す代わりに上向き矢印キーを使うと便利です。CLEAR キー、NEXT キー、PREV キーがあれば、それぞれ ^l+- コマンドとして機能します。

行指向インタフェース

-l オプションを指定すると、画面指向インタフェースが役立たない場合 (別の画面指向プログラムから使用する場合など) でも、cscope を使用できます。cscope は、フィールド番号 (0 からカウント) から始まり、直後に検索パターンが続く入力行の準備ができると、プロンプト >> を表示します。たとえば、1main とすると、main 関数の定義が検索されます。検索を 1 回だけ行いたい場合は、-l オプションの代わりに、-L オプションと -num pattern オプションを使用してください。その場合、>> プロンプトは表示されません。-l の場合、cscope は参照行の数を出力します。

cscope: 2 lines

参照が見つかるたびに、cscope はそのファイル名、関数名、行番号、および行のテキストをスペースで区切って、1 行に出力します。

main.c main 161 main(argc, argv)

画面指向インタフェースとは異なり、単一の参照を表示するためにエディタが呼び出されることはありません。

r コマンドを使用すれば、データベースを再構築できます。ファイルの終端を検出するか、行の最初の文字として ^d または q が入力されると、cscope は終了します。

環境変数

EDITOR

優先使用するエディタ。デフォルトでは、vi(1) に設定されます。

INCLUDEDIRS

#include ファイルの検索先ディレクトリをコロンで区切ったリスト。

HOME

ホームディレクトリ。ログイン時に自動的に設定されます。

SHELL

優先使用するシェル。デフォルトでは、sh(1) に設定されます。

SOURCEDIRS

追加のソースファイルの検索先ディレクトリをコロンで区切ったリスト。

TERM

端末のタイプ。画面端末でなければなりません。

TERMINFO

端末情報が入ったディレクトリのフルパス名。使用している端末が標準のディレクトリ terminfo にない場合は、curses(3CURSES) および terminfo(4) を参照して、独自の端末記述を作成してください。

TMPDIR

一時ファイル用ディレクトリ。デフォルトでは、/var/tmp に設定されます。

VIEWER

優先使用するファイル表示プログラム (pg など)。これは EDITOR をオーバーライドします (上記を参照)。

VPATH

コロンで区切られたディレクトリのリスト。各ディレクトリは、下位に同じディレクトリ構造を持っています。VPATH が設定されている場合、cscope は指定されたディレクトリでソースファイルを検索します。設定されていない場合、cscope は現在のディレクトリだけで検索します。

ファイル

cscope.files

-I-p-T オプションとソースファイルのリスト (-i オプションによってオーバーライドされる) が入っているデフォルトファイル。

cscope.out

シンボルの相互参照ファイル。現在のディレクトリに作成できない場合は、ホームディレクトリに作成されます。

ncscope.out

古い相互参照を置き換える前の、新しい相互参照を含む一時ファイル。

関連項目

C ユーザーズガイド』。

cscope は、次の形式の関数定義を認識します。

fname blank ( args ) white arg_decs white {

ここでは:

fname

関数名

blank

ゼロ個以上のスペースまたはタブ (復帰改行は含まない)

args

" および復帰改行を含まない任意の文字列

white

ゼロ個以上のスペース、タブ、または復帰改行

arg_decs

ゼロ個以上の引数宣言 (arg_decs にはコメントや空白を含むことができる)

関数の宣言は、行の先頭から始める必要はありません。関数名の前には、戻り型を置くことができます。その場合でも、cscope は宣言を認識します。これ以外の形式の関数定義は cscope で認識されません。

メニューオプション「Find functions called by this function:」の入力フィールドによる検索結果の Function 列には、その行で呼び出された最初の関数だけが表示されます。たとえば、次の関数があるとします。

 
e()
{
     return (f() + g());
}

表示は次のようになります。

 
Functions called by this function: e

File Function Line
a.c  f    3 return(f() + g());

#if 文の内部に中括弧があると、関数定義または関数呼び出しが認識されないことがあります。同様に、変数の使用が、誤って定義として認識されることがあります。

typedef で定義された名前がプリプロセッサ文の前にあると、それは誤って大域定義として認識されます。次に例を示します。

 
LDFILE *
#if AR16WR

また、プリプロセッサ文が大域定義の認識を妨げることもあります。次に例を示します。

 
char flag
#ifdef ALLOCATE_STORAGE
     = -1
#endif
;

関数内部の関数定義は、誤って関数呼び出しとして認識されます。次に例を示します。

 
f()
{
     void g();
}

これは、誤って g() の呼び出しとして認識されます。

cscope は、キーワード class を検索することで C++ のクラスを認識します。しかし、struct もクラスであるとは認識しません。したがって、構造体内部のインラインメンバー関数の定義を認識しません。さらに、typedef 内にキーワード class を想定していないため、次のような場合の X は誤って定義として認識されます。

typedef class X * Y;

また、演算子関数の定義も認識しません。

 
Bool Feature::operator==(const Feature & other)
{
     ...
}