Provided by: manpages-ja_0.5.0.0.20221215+dfsg-1_all bug

名前

       gprof - コール・グラフ (call graph) のプロファイルを表示する

書式

       gprof [ -abcsz ] [ -e|-E name ] [ -f|-F name ] [ -k fromname toname ] [ objfile [ gmon.out ] ]

説明

       gprof は C, Pascal, Fortran77 プログラムの実行プロファイルを生成する。呼び出 されたルーチンの値は呼び出し
       元に取り込まれる。プロファイルのためのデー  タはコール・グラフ (call graph: 関数コールの親子関係のグラフ)
       のプロファ  イルデータファイル  (デフォルトでは  `gmon.out')  から取り  込まれる。このファイルは  cc(1)
       pc(1) f77(1) で -pg オプションを指定してコンパイルされたプログラムによって作成される。 -pg オプションで
       は、リンクされるライブラリもプロファイル用にコンパイルされ  たものになる。 gprof は指定されたオブジェクト
       ファイル (デフォルトは `a.out') からシンボ ルテーブルを読み、これと `gmon.out' のコール・グラフ・プロファ
       イルとを 関連付ける。 複数のプロファイルデータファイルが指定された場合には、 gprof はそれらのプロファイル
       情報をすべて合計して表示する。

       gprof はそれぞれのルーチンによって消費された時間を計算する。次にこれらの時間 をコール・グラフの枝に沿って
       親ルーチンへと伝播させる。プログラムの サイクル (cycle: 再帰呼び出しの循環)  をまとめ、サイクルへのコール
       を行っ  たルーチンは、サイクルで消費した時間を共有するとみなす。最初のリストは 関数で、消費時間の順にソー
       トされている。 消費時間にはコール・グラフでの子孫の分も含まれる。それぞれの関数エントリ  の下には、その関
       数のコール・グラフでの (直接の) 子と、そこで消費された 時間がどのように関数に伝播したかが表示される。同様
       の表示は関数の上にも  表示されており、その関数とそれらの子孫で消費された時間がどのようにコー ル・グラフの
       (直接の) 親へ伝播するかが示される。

       サイクルも表示される。サイクル全体としてのエントリ、そのサイクルに属す るメンバーのリストとそれぞれのメン
       バーによって消費された時間、その サイクルの呼び出し回数などが表示される。

       次にフラットプロファイル (prof(1) の結果と似たもの)  が与えられる。このリストでは合計実行時間、呼び出し回
       数、そのルーチン自身で消費した時間  (ミリ秒単位)、子孫の分も含めて消費  した時間  (ミリ秒単位) が表示され
       る。

       最後に関数名の索引が与えられる。

オプション

       以下のオプションが指定できる:

       -a     スタティックに宣言された関数を表示しない。このオプションが指定され  ると、スタティックな関数に関す
              る全ての情報    (実行時間、他の関数の呼び出   し、他の関数から呼び出される関係など)   は、ファイル
              `objfile' 中でこの スタティックな関数の直前にロードされた関数に属することになる。

       -b     プロファイルのそれぞれのフィールドに関する説明を表示しない。

       -c     プログラムのスタティックなコール・グラフを、オブジェクトファイルのテキ  ストセグメントを調べるとい
              う発見的  (heuristic) な手法で作成する。ス タティック・コールだけの親や子の呼び出し回数は 0 として
              表示する。

       -e name
              ルーチン  name  と、その子孫すべてに関するグラフプロファイルのエントリを表示しない   (子孫に関して
              は、別の祖先がいれば表示される)。  -e オプションは複数回指定できる。一つの -e オプションについて指
              定できる name は一つだけである。

       -E name
              -e と同様にルーチン name とその子孫に関するグラフプロファイルのエントリを表示しない。また name (と
              その子孫) によって消費された時間も、プログラム実行の総時間 (および パーセンテージの計算)  から除か
              れる。例えば -E mcount -E mcleanup はデフォルトになっている。

       -f name
              ルーチン name とその子孫に関してのみ、グラフプロファイルのエントリを表示する。 -f オプションは複数
              回指定できる。一つの -f オプションについて指定できる name は一つだけである。

       -F name
              -f  と同様に、ルーチン name とその子孫に関してのみ、グラフプロファイルのエントリを表示する。またこ
              れらによって用いられた時間だけを合計の実行時間とパーセンテージの計算に 用いる。 -F  オプションは複
              数指定できる。一つの -F オプションについて指定できる name は一つだけである。 -F オプションは -E オ
              プションによる設定を上書きする。

       -k fromname toname
              ルーチン fromname からルーチン toname までの枝を削除する。これは不要なサイクルの循環を破壊するのに
              便利である。 -k は複数指定できる。一つの -k オプションに対して指定できるのは一組のルーチン名だけで
              ある。

       -s     プロファイルファイル  `gmon.sum' を作成し、指定したプロファイルファイル の情報すべてからのプロファ
              イル情報を総計したものを書き込む。この合計プ ロファイルファイルは後に gprof を (おそらくは -s と共
              に) 実行する際に与えて、 `objfile' ファイルを複数回実行して得られ たプロファイルデータを累積するた
              めに用いることもできる。

       -v     gprof のバージョン番号を表示して終了する。

       -z     用いられなかった関数 (呼び出し回数と実行時間でわかる) も表示する。これ を -c  オプションと共に用い
              ると、呼び出されなかったルーチンを見つけるのに役 に立つ。

ファイル

       a.out       名前のリストとテキスト空間
       gmon.out    ダイナミックなコール・グラフとプロファイル
       gmon.sum    ダイナミックなコール・グラフとプロファイルのまとめ

関連項目

       monitor(3), profil(2), cc(1), prof(1)

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

       ``gprof: A Call Graph Execution Profiler'', by S. Graham, P. Kessler, M.  McKusick;  Proceedings  of  the
       SIGPLAN '82 Symposium on Compiler Construction, SIGPLAN Notices, Vol. 17, No  6, pp. 120-126, June 1982.

履歴

       gprof は 4.2 BSD から登場した。

バグ

       サンプリングの粒度  (granularity) も表示されるが、せいぜい統計的なもの でしかない。ここでは関数の一回あた
       りの実行時間は、関数の消費した合計時 間を呼び出し回数で割ったものと仮定している。したがって、呼び出しグラ
       フの 枝を伝播して関数の親に伝わる時間は、枝を通過した回数に直に比例すること になる。

       自分自身がプロファイルされていない親でも、子から伝播してくる時間を保有 することになる。しかしこれらのルー
       チンは、呼び出しグラフの中で (どこか ら呼び出されたのでもなく) 勝手に起動するように見えるので、その時間は
       そ れ以上どこへも伝播しない。同様に、シグナルをキャッチしたルーチンは、プ  ロファイルされていても勝手に起
       動するように見えてしまう  (理由はもう少し 複雑だが)。シグナルをキャッチしたルーチンの子がプロファイルされ
       てい  ればその時間を正しく伝播させることができるが、親ルーチンがプロファ   イルルーチンの途中でシグナルが
       キャッチされた場合には全ての情報は失われる。

       プロファイルされるプログラムは exit(2) をコールして終了するか、 main ルーチンからの return で終了しなけれ
       ばな らない。さもないと終了時にプロファイル情報が `gmon.out' ファイルにセー ブされない。

                                                January 29, 1993                                        GPROF(1)