gprof

提供: C++入門
2014年7月6日 (日) 01:04時点におけるDaemon (トーク | 投稿記録)による版 (ページの作成:「gprof (GNU Profiler)とは、GNUが提供しているプロファイラです。プログラムのパフォーマンスを改善するためには、プログ...」)

(差分) ←前の版 | 最新版 (差分) | 次の版→ (差分)
移動: 案内検索
スポンサーリンク

gprof (GNU Profiler)とは、GNUが提供しているプロファイラです。プログラムのパフォーマンスを改善するためには、プログラムのボトルネックが特定できなければなりません。gprofは、アプリケーションがどの処理に最も時間を費やしているかを特定するのに役立ちます。gprofは、コールグラフプロファイルデータを表示するためのコマンドです。

読み方

gprof
じーぷろふ

概要

gprofを使用するためには、プログラムのコンパイル時にgprofを有効にしなければなりません。

プロファイルデータを表示するまでの簡単な手順を以下に示します。

  1. gprof を有効にしてコンパイル(-pgオプション)します。
  2. プログラムを実行する。この時点で、コールグラフプロファイルデータが作成されます。
  3. gprofでコールグラフプロファイルデータを表示します。

使い方

プロファイルデータを表示するまでのコマンドでの手順は、以下の通りです。

$ c++ -gp main.cpp
$ ./a.out
$ gprof a.out a.out.gmon > a.out.gprof
$ vim a.out.gprof

実行例

コマンドラインオプション

Usage: gprof [-[abcDhilLsTvwxyz]] [-[ACeEfFJnNOpPqSQZ][name]] [-I dirs]
        [-d[num]] [-k from/to] [-m min-count] [-t table-length]
        [--[no-]annotated-source[=name]] [--[no-]exec-counts[=name]]
        [--[no-]flat-profile[=name]] [--[no-]graph[=name]]
        [--[no-]time=name] [--all-lines] [--brief] [--debug[=level]]
        [--function-ordering] [--file-ordering]
        [--directory-path=dirs] [--display-unused-functions]
        [--file-format=name] [--file-info] [--help] [--line] [--min-count=n]
        [--no-static] [--print-path] [--separate-files]
        [--static-call-graph] [--sum] [--table-length=len] [--traditional]
        [--version] [--width=n] [--ignore-non-functions]
        [--demangle[=STYLE]] [--no-demangle] [--external-symbol-table=name] [@FILE]
        [image-file] [profile-file...]

プロファイルの実行例

C++のメソッド名が長いので、表示を省略して掲載しています。

$ gprof resize.out resize.out.gmon -p | cut -c 1-80 |head -n 30
Flat profile:
 
Each sample counts as 0.000123031 seconds.
  %   cumulative   self              self         ??
 time   seconds   seconds    calls  ms/call  ms/call  ??
 89.19      9.69     9.69                             std::time_put<wchar_t, std
  6.07     10.35     0.66        1   659.69   659.69  std::time_get<wchar_t, std
  2.40     10.61     0.26 140000022     0.00     0.00  __cxa_free_dependent_exce
  1.79     10.80     0.19       11    17.65    43.35  __cxa_allocate_exception
  0.31     10.84     0.03        2    16.98    16.98  std::string::_Rep::_M_dest
  0.23     10.86     0.02 60000087     0.00     0.00  __cxa_allocate_dependent_e
  0.00     10.86     0.00       20     0.00     1.70  __cxa_free_exception
  0.00     10.86     0.00       18     0.00     0.00  std::locale::_Impl::_Impl(
  0.00     10.86     0.00       14     0.00     0.00  std::locale::facet::_S_get
  0.00     10.86     0.00       12     0.00     0.00  std::locale::_Impl::_Impl(
  0.00     10.86     0.00       10     0.00     0.00  d_print_comp
  0.00     10.86     0.00        8     0.00     0.00  std::__timepunct_cache<cha
  0.00     10.86     0.00        6     0.00     0.00  std::basic_ostream<char, s
  0.00     10.86     0.00        6     0.00     0.00  std::messages<char>::messa
  0.00     10.86     0.00        5     0.00     0.00  std::ostream::seekp(std::f
  0.00     10.86     0.00        4     0.00     0.00  std::time_get<char, std::i
  0.00     10.86     0.00        4     0.00     0.00  std::basic_ostream<char, s
  0.00     10.86     0.00        4     0.00     0.00  std::__numpunct_cache<char
  0.00     10.86     0.00        4     0.00     0.00  std::numpunct<char>::numpu
  0.00     10.86     0.00        4     0.00     0.00  std::time_put<char, std::o
  0.00     10.86     0.00        2     0.00    18.66  __gnu_cxx::__throw_concurr
  0.00     10.86     0.00        2     0.00     0.00  std::num_get<char, std::is
  0.00     10.86     0.00        2     0.00     0.00  std::num_put<char, std::os
  0.00     10.86     0.00        2     0.00     0.00  std::num_put<char, std::os
  0.00     10.86     0.00        2     0.00     0.00  std::time_get<char, std::i

それぞれの意味は、以下の通りです。

 %         the percentage of the total running time of the
time       program used by this function.
 
cumulative a running sum of the number of seconds accounted
 seconds   for by this function and those listed above it.
 
 self      the number of seconds accounted for by this
seconds    function alone.  This is the major sort for this
           listing.
 
calls      the number of times this function was invoked, if
           this function is profiled, else blank.
 
 self      the average number of milliseconds spent in this
ms/call    function per call, if this function is profiled,
           else blank.
 
 total     the average number of milliseconds spent in this
ms/call    function and its descendents per call, if this
           function is profiled, else blank.
 
name       the name of the function.  This is the minor sort
           for this listing. The index shows the location of
           the function in the gprof listing. If the index is
           in parenthesis it shows where it would appear in
           the gprof listing if it were to be printed.

関連項目




スポンサーリンク