Oracle Solaris Studio 12.4 Man Pages

印刷ビューの終了

更新: January 2015
 
 

tcov(1)

名前

tcov - ソースコードテストカバレージ解析およびソース行プロファイル

形式

tcov [ -a ] [ -n ] [ -o filename ] [ -p oldpath newpath ]
     -x profile_directory source_files ...

説明

tcov は、コンパイルされたプログラムのテストカバレージを解析します。tcov は、ソースファイルを引数として取り、実行カウントの注釈を付けたテストカバレージリストを出力として生成します。テストカバレージリストの実行カウントは、コンパイルされたコードの「基本ブロック」に関連付けられています。「基本ブロック」とは、最初から最後まで必ず実行される一連の連続した命令のことです。

テストカバレージリストでは、コンパイルされたコードの新しい基本ブロックが始まる各ソース行 (または、tcov にオプション -a を指定している場合は各ソース行) の先頭に、ソース行の最初の基本ブロックが実行された回数が付けられます。リストでは、実行されなかった基本ブロックが始まるソース行の先頭には、「#####」が示されます。

tcov を使用するには、コンパイラオプション -xprofile=tcov[:profile_directory] を指定して、1 つまたは複数のプログラムをコンパイルおよびリンクする必要があります。オプションの profile_directory は、実行時にプロファイルデータが保存されるディレクトリの UNIX パス名を指定します。コンパイルとリンクを別の段階で行う場合は、コンパイル時に使用したものと同じ -xprofile オプションを使用してプログラムをリンクするようにしてください。ld は直接使用しないでください。

-xprofile=tcov[:profile_directory] を指定してコンパイルしたプログラムを実行するたびに、プロファイルディレクトリ内の実行プロファイルカウンタが更新されます。このディレクトリは、オプションの引数 profile_directory をコンパイル時に指定したかどうかに応じて、コンパイル時またはプログラムをはじめて実行するときに作成されます。

オブジェクトファイルに対する変更が実行時に検出されると、変更されたオブジェクトファイルのプロファイルカウンタが 0 にリセットされます。変更されたオブジェクトファイルの検出時に 0 にリセットされる一連のプロファイルカウンタの範囲は、環境変数 SUN_PROFDATA_REPLACE を使用して変更できます。SUN_PROFDATA_REPLACE の詳細は、cc(1)、CC(1)、または f95(1) のマニュアルページを参照してください。

-xprofile=tcov[:profile_directory] を指定してコンパイルしたプログラムを少なくとも 1 回実行したあと、指定したプロファイルディレクトリおよび 1 つまたは複数のソースファイルを使用して tcov を実行できます。tcov は、プロファイルディレクトリのデータを使用して、ソースファイルごとに実行カウントの注釈を付けたテストカバレージリストを作成します。テストカバレージリストは、source_file.tcov という名前のファイルに書き込まれます。source_file は、ソースファイルの UNIX ベース名です。

有効なプロファイルデータを含むプロファイルディレクトリの場所は、環境変数 SUN_PROFDATA_DIR を設定して任意に修飾した tcov -x profile_directory オプションを使用して指定する必要があります。後述の「環境」を参照してください。

オプション

-a

ソース行ごとに実行カウントを表示します。-a を指定しない場合、コードの各基本ブロックの先頭にあるソース行にだけ実行カウントが表示されます。

-n

もっとも頻繁に実行されている n 行のソース行について、その行番号と実行カウントを一覧表示します。

-o filename

出力先を file.tcov ではなく filename に指定します。filename が「-」の場合は、出力先を file.tcov ではなく標準出力に指定します。このオプションは、環境変数 TCOVDIR または SUN_PROFDATA_DIR によって指定されたディレクトリをすべてオーバーライドします (後述の「環境」を参照)。

-p originalpath newpath

tcov の実行時にソースファイルに含まれるパスがコンパイル時のものと異なる場合、-x オプションに混乱が生じることがあります。これは、同じディレクトリに対して異なるマウントポイントを持つ 2 つの異なるマシンを使用していると、頻繁に発生します。このオプションを使用すると、コンパイル時にパス接頭辞が originalpath となっていたすべてのソースファイルで、tcov の実行時にはパス接頭辞が newpath となることを、tcov に知らせることができます。-p オプションは、必要な数だけ指定できます。

-x profile_directory

このオプションでは、-xprofile=tcov コンパイラフラグでコンパイルされたプログラムの実行によって累積されたテストカバレージデータが含まれているプロファイルディレクトリを指定します。profile_directory は、テストカバレージデータを含むディレクトリの名前です。通常、これは program.profile/ になります。program は、コンパイル済み実行可能ファイルの名前です。(たとえば、a.out.profile)。

使用例 1 ディレクトリプロファイルを作成します。

次の例では、プログラム a.out のコンパイル時に /var/demo/data.profile という名前のプロファイルディレクトリを作成します。

 
demo% cc -xprofile=tcov:/var/demo/data.profile alpha.c beta.c gamma.c
demo% ./a.out
demo% tcov -x /var/demo/data.profile alpha.c beta.c gamma.c
demo% cat alpha.c.tcov beta.c.tcov gamma.c.tcov
使用例 2 プロファイルディレクトリを現在の作業ディレクトリ内に作成します。

次の例では、プログラム a.out をはじめて実行するときに、現在の作業ディレクトリに a.out.profile という名前のプロファイルディレクトリを作成します。

demo% cc -xprofile=tcov alpha.c beta.c gamma.c
demo% ./a.out
demo% tcov -x a.out.profile alpha.c beta.c gamma.c
demo% cat alpha.c.tcov beta.c.tcov gamma.c.tcov

環境変数

TCOVDIR

次の SUN_PROFDATA_DIR と同じです。

SUN_PROFDATA_DIR

SUN_PROFDATA_DIR が設定されている場合は、その値によって、tcov がプロファイルディレクトリの検索およびテストカバレージリストファイルの書き込みを行うディレクトリの UNIX パス名が指定されます。SUN_PROFDATA_DIR が設定されていない場合、tcov は、現在の作業ディレクトリ内でプロファイルディレクトリを探し、テストカバレージリストファイルを書き込みます。

TCOVDIRSUN_PROFDATA_DIR の両方が設定されている場合は、警告が表示され、SUN_PROFDATA_DIR が使用されます。

SUN_PROFDATA

SUN_PROFDATA が設定されている場合は、その値によって、プロファイルディレクトリを指定せずに -xprofile=collect または -xprofile=tcov を使用してコンパイルしたプログラムのプロファイルディレクトリの名前が指定されます。SUN_PROFDATA が設定されていない場合、プロファイルディレクトリの名前は program.profile, になります。program は、プログラムの UNIX ベース名です。

SUN_PROFDATA を設定しても、tcov 自体には影響しません。

ファイル

program.profile

コンパイル時にプロファイルディレクトリを指定せずにコンパイルしたプログラムのプロファイルディレクトリの名前

source_file.tcov

テストカバレージリストファイルには、ソースファイルの接尾辞が含まれます。次に例を示します。alpha.c.tcov

前述の SUN_PROFDATA_DIR および SUN_PROFDATA 環境変数も参照してください。

関連項目

cc (1) , CC (1) , f95 (1) gprof (1) , prof (1) , exit (2)

診断

"no data for source file in profile_directory"

指定されたプロファイルディレクトリにデータが含まれていないソースファイルに対して発行されます。

exit() を呼び出さなかったり、main() から戻らなかったり、非同期のプロファイル収集を使用しなかったりするプログラムでは、テストカバレージデータは累積されません。非同期のプロファイル収集については、cc(1)、CC(1)、および f95(1) のマニュアルページを参照してください。