関数実行のプロファイリング
Valgrindのツールスイートに含まれるCallgrindツールを使用すると、関数の実行に関連する問題を検出できます。Callgrindによって生成されたデータファイルを、プロファイルデータの可視化ツールであるKCachegrindに読み込み、パフォーマンスの結果を確認できます。
ValgrindツールとKCachegrindをダウンロードしてインストールした後、Qt Creator からCallgrindとKCachegrindを使用できます。
注: Callgrind および KCachegrind は、Linux 上でローカルにインストールして実行できます 。また、任意のコンピュータからリモートの Linux マシンやデバイス上で Callgrind を実行することも可能です。
プロファイリング用のアプリをビルドする
Callgrind は、アプリケーションの実行時に実行される関数の呼び出し履歴を記録します。実行された命令数、ソースコードの行との関連性、関数間の呼び出し元と被呼び出し先の関係、およびそのような呼び出しの回数を収集します。また、キャッシュシミュレーションや分岐予測を使用して、アプリケーションの実行時の挙動に関する情報を収集することもできます。
デバッグビルドとリリースビルドの構成では実行時の特性が大きく異なるため、一方のビルド構成で得られた分析結果は、もう一方の構成には当てはまらない場合があります。 デバッグビルドのプロファイリングを行うと、多くの場合、コンテナの実装などの低レベルなコードに時間の大部分が費やされていることが判明しますが、同じアプリケーションのリリースビルドのプロファイルでは、インライン化やその他の最適化が通常行われるため、そのようなコードは現れません。
最近の多くのコンパイラでは、デバッグ情報を保持したまま最適化されたアプリケーションをビルドすることができます。たとえば、GCC の一般的なオプションは次のとおりです。-g -O2 。Callgrind によるプロファイリングには、このような設定を使用することをお勧めします。
データの収集
アプリケーションを分析するには:
- 「Projects 」モードに移動し、リリースビルドの構成を選択します。
- モードセレクタで、「Debug 」 > 「Callgrind 」を選択します。

- 「
」を選択してアプリケーションを起動します。 - アプリケーションを使用して分析を行います。
- 「
」を選択して、「Functions 」ビューで分析結果を表示します。
を選択して、イベントログの記録を一時停止し、プロファイリング中のプログラムの実行速度を向上させます。ログの記録が一時停止されている間は、イベントはカウントされません。
「
」(Reset )を選択して、すべてのイベントカウンタをリセットします。
「
」を選択すると、収集されたすべてのデータが破棄されます。
を選択すると、KCachegrind でデータを表示できます。Qt Creator を選択すると、KCachegrind が起動し、データが読み込まれて視覚化されます。
収集したデータの表示
分析結果は、Callgrind のビューに表示されます。ビューを分離して移動させることができます。変更を元に戻すには、[Views ] > [Reset to Default Layout] を選択します。
「Views 」を選択すると、ビューやビューのタイトルを表示または非表示にできます。「Visualization 」ビューはデフォルトで非表示になっています。「
」を選択すると、表示されているデータが更新されます。
データを収集する代わりに、「
」を選択して、外部のログファイルを「Callgrind 」ビューに読み込むこともできます。

結果をフィルタリングするには、「Filter 」フィールドに文字列を入力してください。
Functions ビューで関数にカーソルを合わせると、その関数に関する詳細情報が表示されます。
関数をダブルクリックすると、「Callers 」ビューで呼び出し元関数に関する情報、「Callees 」ビューで呼び出された関数に関する情報を表示できます。
「
」(Previous )および「
」(Next )を選択します。「Callee 」ビューで関数間を移動します。
コスト形式を設定するには、[$] を選択します。絶対コストや相対コスト、親に対する相対コストを表示できます。[
] を選択すると、そのプロジェクトに由来するプロファイリング情報のみを表示できます。
再帰的または循環的な関数呼び出しを適切に処理するには、O を選択してサイクル検出を有効にしてください。
関数名を表示する際にテンプレートパラメータリストを除外するには、[<>] を選択します。
「Memcheck によるメモリリークの検出」、「外部アプリケーションでの Valgrind ツールの実行」、「プロジェクトの Valgrind 設定の指定」、「Valgrind Callgrind」、および「Valgrind Memcheck」も参照してください 。
Copyright © The Qt Company Ltd. and other contributors. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.