gprof(1) FreeBSD 一般コマンドマニュアル

gprof

前のページ 上に戻る 次のページ

gprof




解説

     gprof は、C や Pascal, Fortran77 の実行プロファイルを生成します。 gprof
     では、呼び出されたルーチンの実行時間は、呼び出した側のルーチンに加算され
     ます。プロファイルデータは、呼び出しグラフプロファイルファイル (call
     graph profile file) から読み出されます。このファイルは、 cc(1), pc(1),
     f77(1)-pg をつけてコンパイルされたプログラムによって生成されます。
     -pg をつけると、コンパイラはプロファイル用ライブラリをリンクします。
     gprof は与えられたオブジェクトファイル (デフォルトでは a.out) を読み込ん
     で、そのオブジェクトのシンボルテーブルと呼び出しグラフプロファイルとを結
     び付けます。デフォルトのグラフプロファイルファイルの名前は、実行形式名に
     サフィックス .gmon を付けたものです。 2 つ以上のプロファイルファイルが与
     えられると、 gprof は、それらの情報を合計して出力します。

     gprof は、各ルーチンが消費した時間を計算します。次に、この時間は呼び出し
     グラフの辺にそって伝播されます。サイクルが見つかると、サイクルに対する呼
     び出しが、サイクルの時間を共有するものとされます。最初のリストには、関数
     からの呼び出しグラフ全体の合計時間によってソートされた関数が表示されてい
     ます。各関数のエントリの下には、その関数の呼び出しグラフでの (直接の) 子
     (すなわち呼び出された関数名) が表示され、それらの関数の消費時間がどれくら
     い親 (つまり呼び出した側の関数) に伝播されているかが示されています。同様
     に、各関数のエントリの上側には、関数での消費時間が呼び出し元の関数にどの
     ように伝播されているかが示されています。

     サイクル全体とそのメンバーのリストを示したエントリが、サイクルの呼び出し
     回数や実行時間への各メンバーの寄与を含めて表示されます。

     次のリストでは、 prof(1) (NetBSD, FreeBSDにはありません) と同様なフラット
     プロファイル (flat profile) 表示されます。ここには、関数の合計実行時間や
     呼び出し回数、その関数本体のみの実行時間 (ミリ秒またはマイクロ秒) 、その
     関数本体及びそこから呼び出された関数の実行時間 (ミリ秒またはマイクロ秒)
     、が表示されます。

     最後に関数名の索引が表示されます。

     以下のオプションが利用可能です。

     -a          静的に宣言された関数の表示を抑制します。このオプションが指定
                 されると、静的関数についてのすべての関連する情報 (実行時間、
                 別の関数の呼び出し、他の関数からの呼び出しなど) が、 a.out
                 ファイル中の静的関数の直前に読み込まれるされる関数に含まれる
                 ことになります。

     -b          プロファイル中の各フィールドの説明文を抑制します。

     -c          オブジェクトファイルのテキスト空間を調べる発見的な方法を使っ
                 て、プログラムの静的呼び出しグラフを見つけます。静的な呼び出
                 しのみの親と子供は、呼び出し数 0 として表示されます。アーキテ
                 クチャによっては、本オプションはサポートされていません。

     -C count    count 数以上の関数を含む (呼び出し関係の) サイクルを取り除く
                 ために、切断すべきアーク (呼び出し関係) の最小集合を見つけま

     -f name     指定されたルーチン name とその子孫のグラフプロファイルエント
                 リのみを表示します。 -f オプションは、複数指定することができ
                 ます。各オプション -f には、1 つしか name を指定することがで
                 きません。

     -F name     -f と同様に、指定されたルーチン name とその子孫のグラフプロ
                 ファイルエントリのみを表示します。プログラムのトータルの時間
                 と計算時間の割合には、表示されたルーチンの時間のみが使われま
                 す。 -F は複数指定することができます。各オプション -F には、1
                 つしか name を指定することができません。オプション -F は、オ
                 プション -E の効果を打ち消します。

     -k fromname toname
                 fromname から toname への関数呼び出し関係のアークを削除しま
                 す。このオプションによって、不必要だと思うサイクルを切断する
                 ことができます。オプション -k は、複数指定することができま
                 す。各オプション -k には一対のルーチン名 (fromnametoname)
                 しか指定することができません。

     -l          呼び出しグラフプロファイルの表示を抑制します。

     -L          フラットプロファイルの表示を抑制します。

     -s          指定されたすべてのプロファイルファイル中のプロファイル情報の
                 合計を表すサマリプロファイルファイル gmon.sum が生成されま
                 す。このサマリプロファイルファイルはこのあとの gprof の実行に
                 対して与えられ (その際にも通常 -s が指定される)、一連の a.out
                 実行の結果のプロファイルデータの合計を求めることができます。

     -u          C プログラムには見えない名前の関数の表示を抑制します。 ELF オ
                 ブジェクト形式では、文字 `.' を含む名前を意味します。 a.out
                 オブジェクト形式では、文字 `_' で開始しない名前を意味します。
                 それらの関数に関連する情報は、すぐ低位側のアドレスにある (表
                 示が抑制されていない) 関数に含まれます。これにより関数内にあ
                 るただのラベルが関数と認識されてしまうのを防ぐ事ができます。

     -z          使用されていないルーチン (呼び出し回数と合計時間が 0 である)
                 を表示します。 -c オプションとともに使うと、一度も呼ばれてい
                 ないルーチンを発見する事ができます。


関連ファイル

     a.out      テキスト空間と名前リスト
     a.out.gmon
                動的な呼び出しグラフとプロファイル
     gmon.sum   動的な呼び出しグラフとプロファイルのサマリ


関連項目

     cc(1), profil(2), clocks(7)

     S. Graham, P. Kessler, and M. McKusick, "An Execution Profiler for
     Modular Programs", Software - Practice and Experience, 13, pp. 671-685,
     1983.

     自身がプロファイルされていない親は、プロファイルしている子供から伝播され
     る時間を持っており、呼び出しグラフのリストのなかで自動的に起動されるもの
     として現れます。しかし、この関数が持つ時間はそれ以上伝播されません。同様
     に、シグナルを捕捉する関数は、それらがプロファイルされていても、自動的に
     起動されるものとして現れます (もう少し複雑な理由がありますが)。プロファイ
     ルルーチンを実行している最中にシグナルを捕捉する関数が呼出されたとき (こ
     の場合はすべてが失われてしまいます) を除いては、シグナルを捕捉する関数の
     子供の実行時間は、その親に正しく伝播されるべきです。

     プロファイルされているプログラムは、グラフプロファイルファイルにプロファ
     イル情報がセーブされるよう exit(3) を呼ぶか、正常に終了しなければいけませ
     ん。

FreeBSD 4.4                      June 6, 1993                      FreeBSD 4.4

ABELNET VPSサービス