web-dev-qa-db-ja.com

Mac OS XでのC ++のプロファイリング

私は自分のMac(os x Lion)でいくつかのc ++コードをプロファイリングしようとしていますが、有用なものを見つけることができませんでした。どの関数がCPU時間を消費しているかを教えてくれるプロファイラーを探しています(matlabプロファイラーと同様)。

ここに私が試したものがあります

  • gprof。これは私がLinuxマシンで使用するものですが、Macでは空の出力が表示されるだけです(明らかに既知の問題)
  • 楽器。私の人生では、コンパイルされたバイナリ内の何かをプロファイルする方法を理解することはできません。また、どんな種類の有用なチュートリアルも見つけられません。
  • (他の検索では、もはや利用できないSharkとメモリ用のValgrindが明らかになりました)。

本当に助かります!

57
foges

Instrumentsは使用するツールです。 Instrumentsの詳細な説明はこの回答の範囲外ですが、クイックスタートガイドは次のとおりです。

  1. 楽器を開きます。1
  2. 「Time Profiler」テンプレートを選択します。
  3. [ターゲット]ドロップダウンメニューでアプリケーションを選択します。2
  4. 赤い丸(「記録」)ボタンを押して、アプリケーションの実行を開始します。
  5. 必要に応じて、プロファイリングする必要があるアプリケーションでいくつかのことを行います。
  6. 録音を停止するには、録音ボタンをもう一度押します。
  7. Instrumentsのツールを使用して結果を分析します。

利用可能なツールのうち、最も頻繁に役立つツールは次のとおりです。

  • 開示矢印を使用してコールツリーを展開する
  • 関数名にある丸い矢印をクリックしてフォーカスします
  • 関数をダブルクリックして、関連するソースを表示します
  • 左側の[コールツリーの反転]チェックボックス

1 インストゥルメントを開く簡単な方法の1つは、Spotlightを使用することです。タスクバーの右上隅(時計の横)にある虫眼鏡をクリックして、「Instruments」と入力するだけです。

2 [ターゲットの選択...]をクリックして、実行可能ファイルのパスに移動します。

99
duskwuff

インストゥルメントは本当に正しい答えですが、使用方法がわからない場合は、組み込みのアクティビティモニターアプリケーションのプロファイラーがあります。アクティビティモニターでは、実行中のプロセスに関する情報を取得でき、しばらくの間その実行をサンプリングするためのボタンがあります。プログラムを開始し、アクティビティモニターに切り替えて、プロセスを見つけてからサンプリングする必要があります。

さらに、デバッガでプログラムを実行し、手動で半ダースほど一時停止し、その時点でコールスタックに注目するだけで、「貧者のプロファイリング」を実行できます。それは非常に単純ですが、プログラムのかなりの部分の最初のパスとして驚くほどうまく機能します。

5
bames53

Instrumentsは使用するツールです。空白のトレースの問題を解決するには、必ずXCode内からInstrumentsを開いてください。

Xcode > Open Developer Tool > Instruments

XCodeの最後の更新の前にドックに固定した古いInstrumentsアイコンからInstrumentsを開くと、空白のトレースが表示されます。

5
chutney