マニュアルページ cflow.1
名前
cflow - C フローグラフの作成
形式
cflow [-r] [-ix] [-i_] [-dnum] files
機能説明
cflow コマンドは、 C 、 yacc 、 lex アセンブラのソースファイ
ル、中間ファイル、オブジェクトファイルをまとめて解析し、そこ
から外部関数参照のグラフを作成します。 .y、.l、.c のいずれか
の 接尾辞が付いたファイルは、それぞれ yacc 、 lex 、C のコン
パイラによって処理します。前処理された結果、接尾辞 .i が付い
た ファイルは、 lint の第 1 段階までの処理を行います。接尾辞
.s が付いたファイルはアセンブルします。アセンブルされた ファ
イル、接尾辞 .o が付いたファイルは、それぞれのシンボルテーブ
ルから抽出された情報を持っています。これらの結果を収集して外
部参照のグラフを作成し、それを標準出力に書き込みます。
出力の各行には先頭から順に、参照番号、レベルを示す適切な数の
タブ、大域シンボルの名前、コロン、大域シンボルの定義が示され
ます。通常、出力の対象となるのは下線で始まらない関数名だけで
す ( 下 記の -i オプションを参照)。C のソースから抽出した場
合、定義の部分には抽象型宣言 (char * など) と、その 後 ろ に
ソー スファイルの名前とその定義が存在する行番号とが山括弧 <>
で囲んで示されます。オブジェクトファイルから抽出された 定 義
は、ファイル名とシンボルが現れた場所のロケーション・カウンタ
( text など) を示します。C 形式の外部名における先頭の下線 は
削除されます。ある名前の定義が一度出力されると、それ以降で同
じ名前を参照している場所は、その定義が存在する行の参照番号だ
け が 示されます。未定義のシンボルを参照している場所では、<>
だけが出力されます。
たとえば、file.c に次のコードが含まれているとします。
int i;
main()
{
f();
g();
f();
}
f()
{
i = h();
}
コマンド
cflow -ix file.c
を実行すると、次の出力が得られます。
1 main: int(), <file.c 4>
2 f: int(), <file.c 11>
3 h: <>
4 i: int, <file.c 1>
5 g: <>
入れ子のレベルがあまりにも深くなるときは、パイ プ を 使っ て
cflow の出力を pr コマンドに渡し、その -e オプションでタブの
カラム数を 8 より少なくすれば、各行を短くすることが で き ま
す。
cc で指定したときと同じように解釈される -D 、 -I 、 -U の 各
オプションのほか、 cflow は次のオプションを解釈します。
-r 「呼び出し元 : 呼び出し先」の関係を逆にし、各関数の呼
び 出し元を示す反転リストを作成します。このリストはま
た、呼び出し先に従って辞書式順序でソートされます。
-ix 外部データ・シンボルと静的データ・シンボルを 含 み ま
す。 デフォルトでは、関数だけがフローグラフに含まれま
す。
-i_ 下線で始まる名前も含みます。デフォルトでは、これら の
関数が除外されます ( -ix を使用したときには、データも
除外の対象になります)。
-dnum num は、フローグラフの深さを指定する 10 進整数で す。
デ フォルトでは、この数値が非常に大きくなっています。
num がゼロ以下のときは無視されます。
関連項目
as(1)、 cc(1)、 lex(1)、 lint(1)、 nm(1)、 pr(1)、 yacc(1)
診断
同じ名前に対して複数の定義が行われていた場合は、最初に見つけ
た定義だけを採用します。
注意事項
lex や yacc で作成されたファイルでは、行番号宣言の順序が変更
さ れているため、 cflow が混乱する可能性があります。正しい結
果を得るために、 yacc および lex の入力ファイルを指定して く
ださい。