以下の方法はXcode 8以下でしか使えません。
Xcode 9以降では iprofiler -timeprofiler <executable> <args>
はinstruments -l 10000 -t "Time Profiler" <executable> <args>
で置き換えることができるという話もあるのですが、自分の場合はうまくデバック情報が付与されずに使い物になりませんでした。
代替案として、以下のようにします。
https://developer.apple.com/download/more/ より Xcode8.3.3 をダウンロード (~/Xcode8
というディレクトリ以下にxipファイルを解凍下とする)
以下のiprofiler
を全て~/Xcode8/Xcode.app/Contents/Developer/usr/bin/iprofiler
に置き換えて実行する。
dtpsファイルの出力を見る際はopen ~/Xcode8/Xcode.app/Contents/Applications/Instruments.app/
でXcode8のInsrumentsを開いた上でそこにドラッグ&ドロップして結果を見る
Macの場合はXCodeについてくるiprofiler
と言うものを使うだけでしっかりプロファイリングができる。
プロファイリングの仕組みとしては定期的にポーリングし、そのなときにどこの部分を処理していたかを取得する方法で、実行時間が長くかかっているところなどを見つけることができる模様。
iprofilerの使い方
C++のexecutableを作る
まず、デバッグ情報付与つき(-g
)でコンパイルする。最適化オプション(-O2
)はつけないと実行時間が大きく変わってしまうのでつけたほうが良い。
$ c++ -g -O2 -o main main.cpp
iprofilerを使う
iprofilerは以下のように使用する
iprofiler -timeprofiler <executable> <args>
この時、デフォルトの10秒間プロファイリングが走る。
例えば1分間上のmain
というプログラムを-n 10
というオプション付きで走らせたいときはこうなる
$ iprofiler -timeprofiler -T 60 ./main -n 10