CUIのプログラムをmac上で取ろうと思ったときの問題点
- C++で書いたコードに対して、mac上でgprofを使ってプロファイルを取ろうと思っても正しく計測できない。(バグなのかなんなのかよく分からないが。。。)
- C++に限定した話ではなく、Cでも同様。
- そこでXCodeの付属のツールとしてついてくるプロファイリングツールを使う。
- Appleの開発環境でのプロファイラと言えば、以前は Shark というソフトだったが、今はInstrumentsというツールに統合されている。
- さてInstrumentsでプロファイルを取ろうと思った場合、既存のプロセスにアタッチするしか方法が無い。これではCUIのコードに対して使おうと思った場合、プロセスを走らせておいて急いでInstrumentsのUIからプロセスにアタッチする、という非常に面倒な手順を踏む事になる。
- 既存のプロセスにアタッチするのではなくプロセスを起動してプロファイルを取得したい場合には、InstrumentsのUIではなく、iprofilerというコマンドを使うと良い。
使い方
- ターミナルから iprofiler経由でコマンドを実行する
- 実行するとパスワード入力が求められるので入力する(またはsudoで実行する)
iprofiler -timeprofiler ./my_program.out arg1 arg2
-
実行すると my_program.dtps というディレクトリが作られる。これをInstrumentsで開くとプロファイル結果を確認する事ができる。
- sudoで実行した場合には .dtpsのownerがrootになっているので注意
-
その他、詳細なコマンドラインオプションは man iprofiler で確認する事ができる。