[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6.4 gcov のデータファイル

gcov は、プロファイリングを行なうのにファイルを三つ使う。 これらのファイル名は、元のソースファイルのサフィックスを .bb.bbg.da のどれか一つに置き換えたものになる。 これらのファイルは全てソースファイルと同じディレクトリに置かれ、 プラットフォーム独立な方法で格納されているデータを含む。

.bb.bbg の付いたファイルは、ソースファイルを GNU CC の ‘-ftest-coverage’ オプションを付けてコンパイルしたときに 生成される。 .bb ファイルには、ソースファイルのリスト(ヘッダファイルを含む)、 ソースファイル内の関数、ソースファイル内の各基本ブロックに対応する 行番号が含まれる。

.bb ファイルの形式は、色々な 4バイトの整数のリストからなる。 この整数は、そのファイル内の各基本ブロックの行番号に対応する。 各リストは、行番号 0 で終端される。 行番号が -1 だと、ソースファイル名(4バイト境界に詰め物され、 その後にもう一つ -1 が続く)が続くことを示す。 さらに、行番号が -2 だと、関数名(これも4バイト境界に詰め物され、 もう一つ -2 が続く)が続くことを示す。

.bbg ファイルは、ソースファイルのプログラムフローグラフを 再構成するのに使われる。 それには、各関数毎のプログラムフロー弧(一つの基本ブロックから 別の基本ブロックへの分岐で、分岐が成立する可能性があるもの)の リストが含まれており、.bbファイルと組み合わせることで、 gcov にプログラムフローを再構成させることが可能になる。

.bbg ファイルの形式は以下のようになる。

 
        関数 #0 の基本ブロック数(4バイトの数)
        関数 #0 の弧の総数(4バイトの数)
        基本ブロック #0 の弧の数(4バイトの数)
        弧 #0 の目的基本ブロック(4バイトの数)
        フラグビット(4バイトの数)
        弧 #1 の目的基本ブロック(4バイトの数)
        フラグビット(4バイトの数)
        ...
        弧 #N の目的基本ブロック(4バイトの数)
        フラグビット(4バイトの数)
        基本ブロック #1 の弧の数(4バイトの数)
        弧 #0 の目的基本ブロック(4バイトの数)
        フラグビット(4バイトの数)
        ...

-1(4バイトの数として格納される)を使って、基本ブロックの各関数リストを 区切り、ファイルが正しく読み込まれたことを確認する。

.da ファイルは、GNU CC の ‘-fprofile-arcs’ オプションを 使って構築されたオブジェクトファイルを含むプログラムが実行されたときに 生成される。 別々の .da ファイルがこのオプションを指定してコンパイルした ソースファイル毎に作られる。その .da ファイルの名前は、 生成されるオブジェクトファイルに絶対パスで格納される。 このパス名は、ソースファイル名の拡張子を .da で置き換えたものになる。

.da ファイルの形式は非常に簡単である。 先頭の 8 バイトの数が、このファイルに入っている回数値の数であり、その後に 回数値が続く。回数値は 8バイトの数として格納されている。 各回数値は、プログラムの各弧が実行された回数に対応する。 回数値は累積される。 プログラムが実行される度に、既にある .da ファイルと今回の 起動による新しい回数値を組み合わせる。 弧の数が現在のプログラムに対応しない .da ファイルの内容は 無視され、代わりに単に上書きされる。

この三つファイルは全て、gcov-io.h 内の関数群を使って整数を 格納する。このヘッダにある関数群はストリームへデータを格納したり、 ストリームからデータを取り出す、機種独立な方法を提供している。


This document was generated using texi2html 1.78.