マニュアルページ 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 の入力ファイルを指定して く
     ださい。