p は次のいずれかでなければいけません。
collect[:name]
実行頻度のデータを集めて保存します。のちに -xprofile=use を指定した場合にオプティマイザがこれを使用します。コンパイラは、コードを生成して実行頻度を計ります。
名前は、プログラムを実行するときにプロファイルデータの保存先となるディレクトリに関するオプションの名前です。名前 を指定する場合は、UNIX の絶対パス名にするべきです。名前を指定しない場合は、program を実行するときに、program によって指定されたプロファイル対象プログラムに対応するプロファイルデータが、現在の作業ディレクトリ内にある、program.profile という名前のディレクトリに保存されます。
-xprofile=collect:name でコンパイルしたプログラムは、実行時に、実行時のフィードバック情報を書き込むサブディレクトリ name.profile を作成します。データは、このサブディレクトリのファイル feedback に書き込まれます。$SUN_PROFDATA 環境変数と $SUN_PROFDATA_DIR 環境変数を使用すると、フィードバック情報の置き場所を変更できます。詳細は、「相互の関連性」の章を参照してください。
プログラムを複数回実行すると、実行頻度データは feedback ファイルに蓄積されていくので、以前の実行頻度データは失われません。
別々の手順でコンパイルおよびリンクする場合は、-xprofile=collect でコンパイルしたオブジェクトファイルは、-xprofile=collect で必ずリンクしてください。「3.3.3 コンパイル時とリンク時のオプション」に、コンパイル時とリンク時の両方に指定する必要があるオプションの全一覧をまとめています。
3 つのオプション -xMerge -ztext -xprofile=collect を一緒に使用するべきではありません。 -xMerge を指定すると、静的に初期化されたデータを読み取り専用記憶領域に強制的に配置します。 -ztext を指定すると、位置に依存するシンボルを読み取り専用記憶領域内で再配置することを禁止します。-xprofile=collect を指定すると、書き込み可能記憶領域内で、静的に初期化された、位置に依存するシンボルの再配置を生成します。
use[:name]
-xprofile=collect でコンパイルしたプログラムを前回実行したときに作成されたフィードバックファイルに保存された実行頻度のデータに基づいて、プログラムが最適化されます。
name には分析する実行可能ファイル名を指定します。name は省略可能で、省略すると実行可能ファイル名は a.out とみなされます。
-xprofile オプション (-xprofile=collect から -xprofile=use に変わる) を除き、ソースファイルおよびコンパイラのほかのオプションは、フィードバックファイルを生成したコンパイル済みプログラムのコンパイルに使用したものと完全に同一のものを指定する必要があります。同じバージョンのコンパイラは、収集構築と使用構築の両方に使用する必要があります。-xprofile=collect:name でコンパイルする場合は、最適化コンパイルでも同じ名前 (name) を表示する必要があります。-xprofile=use:name
オブジェクトファイルとそのプロファイルデータの関連付けは、-xprofile=collect を指定してコンパイルしたときのオブジェクトファイルの UNIX パス名に基づいています。前回 -xprofile=collect でコンパイルされなかったためオブジェクトファイルにプロファイルデータがない場合、オブジェクトファイルが -xprofile=collect でプログラムにリンクされていない場合、プログラムが一度も実行されていない場合など、場合によっては、コンパイラはオブジェクトファイルとそのプロファイルデータの関連付けを行いません。
さらに、オブジェクトファイルが前回異なるディレクトリ内で -xprofile=collect を指定してコンパイルされ、-xprofile=collect でコンパイルされたほかのオブジェクトファイルと共通ベース名を共有しているが、それらのファイルを格納しているディレクトリの名前によって一意に識別できない場合も、コンパイラは正しく処理できなくなります。この場合、オブジェクトファイルにプロファイルデータがあっても、オブジェクトファイルが -xprofile=use で再コンパイルされたときに、コンパイラはフィードバックディレクトリ内でそのプロファイルデータを見つけることができません。
このようなあらゆる状況によって、コンパイラはオブジェクトファイルとプロファイルデータの関連付けを失います。したがって、オブジェクトファイルがプロファイルデータを持っているのに、-xprofile=use を指定したときにコンパイラがプロファイルデータをオブジェクトファイルのパス名に関連付けできない場合は、-xprofile_pathmap オプションを使用して正しいディレクトリを特定します。詳細は、「A.2.172 -xprofile_pathmap」を参照してください。
tcov
「新しい」形式の tcov を使った基本ブロックカバレージ解析。
tcov の基本ブロックプロファイルの新しい形式です。-xa オプションと類似した機能を持つが、ヘッダーファイルにソースコードが含まれているプログラムや、C++ テンプレートを使用するプログラムのデータを集めます。コード生成は -xa オプションと類似していますが、.d ファイルは生成されません。その代わりにファイルが 1 つ生成されます。このファイルの名前は最終的な実行可能ファイルに基づきます。たとえば、プログラムが/foo/bar/myprog.profile を実行する場合、データファイルは/foo/bar/myprog.profile/tcovd に保存されます。
tcov を実行する場合は、新しい形式のデータが使用されるように -x オプションを指定します。-x オプションを指定しないと、デフォルトで古い形式の .d ファイルが使用され、予期しない結果が出力されます。
-xa オプションの場合とは異なり、TCOVDIR 環境変数はコンパイル時には影響力を持ちません。ただし、TCOVDIR 環境変数の値はプログラムの実行時に使用されます。
-xprofile=tcov オプションと -xa オプションは、同じ実行可能ファイル内に指定することができます。すなわち、-xprofile=tcov でコンパイルされたファイルと -xa でコンパイルされたファイルが両方含まれたプログラムをリンクすることができます。1 つのファイルを両方のオプションでコンパイルすることはできません。
-xinline か -xO4 を使用したために、関数のインライン化が行われている場合は、-xprofile=tcov によって生成されたコードカバレージ報告は信用できない可能性があります。
環境変数の $SUN_PROFDATA と $SUN_PROFDATA_DIR を設定して -xprofile=collect を指定してコンパイルされたプログラムがどこにプロファイルデータを入れるかを制御できます。これらの変数をまだ設定していない場合は、プロファイルデータは現在のディレクトリの name.profile/feedback に書き込まれます (name は実行ファイルの名前または -xprofile=collect:name フラグで指定された名前)。これらの変数が設定されると、-xprofile=collect データは $SUN_PROFDATA_DIR/$SUN_PROFDATA に書き込まれます。
$SUN_PROFDATA 環境変数と $SUN_PROFDATA_DIR 環境変数は、tcov によって書き込まれたプロファイルデータファイルのパスと名前を制御します。詳細は、tcov(1) のマニュアルページを参照してください。
別々の手順でコンパイルしてリンクする場合は、コンパイル手順とリンク手順で同じ -xprofile オプションを表示する必要があります。1 つの手順で -xprofile を取り込み、もう 1 つの手順で除外すると、プログラムの正確さは損なわれませんがプロファイルを行えなくなります。
Linux プラットフォームで共有ライブラリを構築するときは、-xprofile=collect または -xprofile=tcov を、-G とともに使用するべきではありません。
-xa、tcov(1) のマニュアルページ『プログラムのパフォーマンス解析』