プロファイリング

http://d.hatena.ne.jp/tazant/20081025/1224930470
プロファイリング手法は幾つかあるが、私が好きなのはランダムサンプリング方式。
準備

  1. 適当な間隔でタイマー割込するスレッド。
  2. 実行対象のプログラム。

方式

  1. 本体スレッドが動く前に割込スレッドを動かす。*1
  2. 本体スレッドを動かす。
  3. 割込スレッドが割り込む。本体スレッドでの実行位置を取得して記録する。*2
  4. 本体スレッドを動かす、割込スレッドが実行位置を取得して記録する、の繰り返し。

解析

  1. 記録した実行位置がどこの関数に属しているかを調べる。
  2. サンプリングがランダムなら割込回数が実行時間に比例する。

*1:main()前に準備関数を呼べるならそこで、できないならプロファイリング時のみmain()の冒頭で

*2:「実行位置」はプログラムカウンタとか中間コードとかスイッチテーブルのインデックスとか