マニュアルページ cscope.1
名前
cscope - 対話形式による C プログラムの検査
形式
cscope [options] files...
機能説明
cscope は、コードの特定の要素について C 言語のソースファイル
を検査するための画面処理用ツールです。
デフォルトでは、現作業ディレクトリに存在する C ( .c と .h)、
lex (.l)、 yacc (.y) のソースファイルを検査します。また、起
動時にコマンド行で検査対象にするソースファイルの名前を指定す
る こ と が できます。どちらの場合でも、現作業ディレクトリで
#include ファイルが見つからなければ、 cscope は標準のディ レ
クトリで検索を行います。 cscope はシンボル相互参照 (デフォル
トでは cscope.out ) を使って、ファイル内の関数、関数呼 び 出
し、マクロ、変数、前処理シンボルの場所を突き止めます。
検査対象のプログラムを構成するソースファイルに対して初めて使
用されたとき、 cscope はシンボル相互参照を作成します。それ以
降の呼び出しでは、ソースファイルの内容が変更されているか、ま
たは指定されたソースファイルが異なっている場合にかぎり、相互
参照を再作成します。相互参照を再作成する場合は、変更が な い
ファイルのデータは古い相互参照からコピーされるため、初めて作
成する場合よりも高速になります。
次のオプションを自由に組み合わせることができます。
-b 相互参照の作成だけを行います。
-C 検索時に大文字 / 小文字を無視します。
-c 相互参照ファイルで ASCII 文字だけを使用 し ま
す。すなわち、データを圧縮しません。
-d 相互参照を更新しません。
-e 1 つのファイルの処理後、次のファイルを処理 す
る 前に現れる ^e コマンド・プロンプトを抑止し
ます。
-f reffile 相互参照ファイルの名前として、デフォ ル ト の
cscope.out の代わりに reffile を使用します。
-Iincdir #include ファイルの名前が / で始まって お ら
ず、 コマンド行にも下記の namefile にも指定さ
れていない場合に、ヘッダファイルの標準の格 納
場 所である INCDIR (通常は /usr/include) で探
す前に、 incdir で探します ( #include ファ イ
ル は二重引用符と山括弧のどちらでも指定できま
す)。 #include ファイルは、現作業ディレ ク ト
リ、 incdir で指定したディレクトリ、標準の格
納場所の順に検索されます。複数の -I オプ ショ
ン を指定した場合は、コマンド行で最初に現れた
ディレクトリから順に検索されます。
-inamefile デフォルトのファイル ( cscope.files ) の代 わ
り に、 namefile に指定した名前のソースファイ
ルを検査します ( namefile に複数のファイル 名
を 指定する場合は、それぞれをスペース、タブ、
または復帰改行 (NEWLINE) で区切ってくだ さ い
)。このオプションを指定すると、コマンド行引数
として指定したすべてのファイルが無視 さ れ ま
す。
-L -num pattern オプションとともに使用し、1 回の
検索を行なって、その結果を 1 行に表示します。
-l 行処理向きインタフェース (後述の「行処理向 き
インタフェース」を参照)。
-num pattern 入力フィールド num (0 からカウントする) に 進
み、 pattern を検索します。
-Ppath 相互参照ファイル (作成済みのもの) に現れる 相
対 パス名の前に path を付けます。これにより、
その相互参照を作成したディレクトリに移動し な
くてもすむようにします。このオプションは、 -d
オプションを使用した場合にだけ有効です。
-pn ファイルパスの後ろから n 個の構成要素を表示し
ます。デフォルト値は 1 で、パス名の最後の構成
要素だけが表示されます。ファイル名をまった く
出力しない場合は 0 を使用してください。
-sdir 追加のソースファイルを 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-9 該当する行番号によって参照されるファイルを編集 し
ます。
スペース 一致する次の行を表示します。
+ 一致する次の行を表示します。
- 一致する前の行を表示します。
^e 表示されたファイルを順番に編集します。
> 表示された行の並びをファイルに追加します。
| パイプを介し、すべての行をシェルコマンドに渡し ま
す。
次のコマンドはいつでも使用することができます。
Tab 次の入力フィールドに移動します。
RETURN 次の入力フィールドに移動します。
^n 次の入力フィールドに移動します。
^p 1 つ前の入力フィールドに移動します。
^y 最後に入力したテキストを検索します。
^b 1 つ前の入力フィールドに移動し、パターンを検索 し
ます。
^f 次の入力フィールドに移動し、パターンを検 索 し ま
す。
^c 検索時に大文字 / 小文字を無視するか区別するかを切
り 替えます (大文字 / 小文字を無視する場合、 FILE
の検索時には File と file も一致します)。
^r 相互参照を再作成します。
! 対話型シェルを起動します ( cscope に戻るには、 ^d
と入力します)。
^l 画面を再表示します。
? cscope の各コマンドについてのヘルプ情報を表示しま
す。
^d cscope を終了します。
注意 : 検索対象のテキストの最初の文字が上記のコマンドのい ず
れかに一致するときは、その前で \ (バックスラッシュ) をタイプ
してエスケープしてください。
テキストの置換
変更対象のテキストを入力すると、新しいテキストを入力するよう
に求められ、古いテキストを含む行が表示されます。次のコマンド
を使って、変更する行を選んでください。
1-9 特定の行を変更対象の行としてマークまたはマーク 解
除します。
* 表示されたすべての行を変更対象の行としてマーク ま
たはマーク解除します。
スペース 次の行を表示します。
+ 次の行を表示します。
- 1 つ前の行を表示します。
a すべての行を変更対象としてマークします。
^d マークした行を変更して終了します。
Esc マークした行を変更しないで終了します。
! 対話型シェルを起動します ( 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(3X) および 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 は宣
言を認識します。これ以外の形式の関数定義は認識しません。
メニューオプション Find functions called by this function:
による検索結果の出力の Function 欄には、行で呼び出された最初
の関数だけが表示されます。たとえば、
ee(())
{{
rreettuurrnn ((ff(()) ++ gg(())));;
}}
この場合、結果の出力は次のとおりです。
FFuunnccttiioonnss ccaalllleedd bbyy tthhiiss ffuunnccttiioonn:: ee
FFiillee FFuunnccttiioonn LLiinnee
aa..cc ff 33 rreettuurrnn((ff(()) ++ gg(())));;
#if 文の内部に中括弧 {} があると、関数定義または関数呼び出し
が認識されないことがあります。同様に、変数が定義として、誤っ
て認識されることがあります。
次のように、 typedef で定義された名前が前処理文の前 に あ る
と、それが大域定義として誤って解釈されることがあります。
LLDDFFIILLEE **
##iiff AARR1166WWRR
また、次のような前処理文により、大域定義が認識されないことが
あります。
cchhaarr ffllaagg
##iiffddeeff AALLLLOOCCAATTEE_<U>_SSTTOORRAAGGEE
== --11
##eennddiiff
;;
関数内部の関数定義は、関数呼び出しと誤って認識されます。たと
えば、
ff(())
{{
vvooiidd gg(());;
}}
これは、g() の呼び出しと認識されます。
cscope は、キーワード class を検索することで C++ のクラス を
認識します。しかし、 struct もクラスであるとは認識しません。
したがって、構造体内部のインライン・メンバーの関数定義を認識
しません。さらに、 typedef 内にキーワード class を想定してい
ないため、次のような場合の X は誤って定義として認識 さ れ ま
す。
ttyyppeeddeeff ccllaassss XX ** YY;;
次のような演算子関数の定義は認識しません。
BBooooll FFeeaattuurree::::ooppeerraattoorr====((ccoonnsstt FFeeaattuurree && ootthheerr))
{{
......
}}