prof コマンド

目的

オブジェクト・ファイルのプロファイル・データを表示します。

構文

prof [ -t |  -c |  -a |  -n ] [  -o |  -x ] [  -g ] [  -z ] [  -h ] [  -s ] [  -S ] [  -v ] [  -L PathName ] [ Program ] [  -m MonitorData ... ]

説明

prof コマンドは、オブジェクト・ファイル Program (デフォルトでは a.out) に関して monitor サブルーチンが収集したプロファイル・データの解釈をします。これは、オブジェクト・ファイル Program 内の記号テーブルを読み取って、プロファイル・ファイル (デフォルトでは mon.out) と関連付けます。prof コマンドは、外部テキストの記号ごとに、その記号のアドレスから次の記号のアドレスまでに費やされた実行時間のパーセンテージ、関数のコール回数、およびコール 1 回当たりの平均ミリ秒数を表示します。

注: C++ オブジェクト・ファイルからのシンボルは、使用する前に名前がデマングルされます。

関数のコール回数を記録するには、-p フラグを指定した cc コマンドを使用して、ファイルをコンパイルしておく必要があります。-p フラグによって、コンパイラーは mcount サブルーチンのコールを、プログラムの再コンパイル後の各関数に対して生成されたオブジェクト・コードに挿入させます。プログラムの実行中、親関数が子関数をコールするたびに、子関数は mcount サブルーチンをコールして、その親子の対に対して専用のカウンターを増やします。-p フラグで再コンパイルされていないプログラムには mcount サブルーチンが挿入されていないので、どの関数がそのプログラムをコールしたかは記録されません。

また -p フラグは、プログラム開始時と終了時に monitor サブルーチンをコールする特別プロファイル始動関数がオブジェクト・ファイルに含まれるようにします。プログラムの終了時に monitor サブルーチンをコールすると、実際に mon.out ファイルを書き込みます。したがって、明示的にメインプログラムを終了させるかまたはメインプログラムから戻るプログラムのみが、mon.out ファイルを作成します。

注: 生成される出力ファイルの名前を変更するには、PROF 環境変数を使用してこれを 次のように設定します。
PROF=filename:<filename>
例えば PROF=myprof と設定すると、生成されるファイルは myprof.out という 名前になります。

ロードされたオブジェクトの位置および名前は mon.out ファイルに保管されます。フラグを選択しない場合は、prof はこれらの名前を使用します。ほかのオブジェクトにアクセスするには、プログラムを指定するかまたは -L オプションを使用しなければなりません。

注: 共用ライブラリー・ルーチン呼び出しなど、インポートされた外部ルーチンを呼び出すと、 ローカル glink コードに対して中間呼び出しが行われ、実ルーチンへの呼び出しがセットアップされます。 このコードの実行中にタイマー・クロックがオフになると、時間は routine.gl と呼ばれるルーチンにカウントされます。ここで、routine はコール先のルーチンです。例えば、glink コードが printf サブルーチンをコールしている間にタイマーがオフになると、時間は printf.gl ルーチンにカウントされます。

フラグ

相互に排他的なフラグ acn、および t prof コマンドによる出力行のソート方法を決定します。

項目 説明
-a 記号アドレスの昇順でソートします。
-c コール回数の降順でソートします。
-n シンボル名の字句別にソートします。
-t 合計時間のパーセンテージの降順でソートします (デフォルト)。

注: フラグ acn、および t のうち複数のフラグを同じコマンドで使用しても、prof コマンドを正常に実行できます。 prof コマンドは、これらのフラグのうちコマンド・ラインで最初に見つかったフラグを受け取り、それ以外は無視します。

相互に排他的なフラグ o および x は、モニターされる各記号のアドレスの表示方法を指定します。

項目 説明
-o 各アドレスをシンボル名とともに 8 進数で表示します。
-x 各アドレスをシンボル名とともに 16 進数で表示します。

注: -o フラグおよび -x フラグの両方を同じコマンドで使用しても、prof コマンドを正常に実行できます。prof コマンドは、この 2 つのフラグのうちコマンド・ラインで最初に見つかったフラグを受け取り、別のフラグは無視します。

以下のフラグは任意に組み合わせて使用できます。

項目 説明
-g 非グローバル記号 (静的関数) を含めます。
-h 通常はレポートに表示される見出しを抑制します。これは、レポートをさらに処理する場合に有効です。
-L PathName 共用オブジェクトの位置を決めるために代替パス名を使用します。
-m MonitorData mon.out のかわりに MonitorData からプロファイル・データを取り出します。
-s mon.sum に要約ファイルを生成します。これは、複数のプロファイル・ファイルを指定するときに有効です。
-S 標準エラーにモニター・パラメーターおよび統計情報の要約を表示します。
-v すべての表示を抑制し、プロット・フィルターで表示できるように標準出力に図形バージョンのプロファイルを送信します。プロット時に、番号の下限および上限 (デフォルトでは 0 および 100) を指定すると、プロファイルの選択されたパーセンテージをそれに対応する高解像度でプロットすることができます。
-z 0 (ゼロ) コールおよび 0 (ゼロ) 時間に関連している場合でも、すべての記号をプロファイルの範囲内に含めます。

  1. 各記号アドレスでの消費時間を時間でソートして、ヘッダーを付けずに表示するには、以下のように入力します。
    prof -t -h
  2. 次の例では、ディレクトリー /home/score/lib 内でファイル runfile を作成するために使用される共用ライブラリーのローカル・バージョンを取り出します。使用されるデータ・ファイルは mon.out ではなく runfile.mon です。
    prof -x -L/home/score/lib runfile -m runfile.mon

ファイル

項目 説明
mon.out デフォルトのプロファイル。
a.out デフォルトのオブジェクト・ファイル。
mon.sum 要約プロファイル。