• Imagix 4D ユーザガイド
  • 目次

プロファイル・データ - CTC++/gcov/gprof

Imagix 4D によって収集され、表示される情報の多くは、ソースコードの静的解析に基づくものですが、本ツールは C / C++ ソフトウェアの実行時のパフォーマンスに関する特定の情報も、収集したり表示したりすることが可能です。プロファイル・データソースから収集される、これらの実行時のパフォーマンスの測定値は、コード内の関数と関連付けられた個々のメトリクスとして、別々に表示することができます。また、[構造] ビューの [グラフ] ウィンドウで、まとめて表示することもできるため、プログラムの全体的な呼び出し構造のコンテキストの中で、個々の関数ならびに呼び出しの実行時のパフォーマンスを確認することも可能となります。さらに、カバレッジ結果は、フローチャートファイルエディタ、およびDiffツールで表示でき、テストケースによって実行された関数の特定の部分と実行されなかった部分を明らかにします。

プロファイル・データソースのプロジェクトへのインポート処理は、必要なデータソースの判断、ソースコードの適切なコンパイル、実行ファイルの実行、データソースのロードで構成されます。オプションになりますが、 Imagix 4D を利用してプロファイル・データソースを管理することで、増分の測定値をサポートすることもできます。

プロファイルデータのソース

Imagix 4Dは、CおよびC++ソースコードの実行時プロファイルデータのいくつかのソースをサポートしています。組み込み開発向けには、Testwell CTC++という任意のターゲットで使用できるインストルメンテーションベースのコードカバレッジツールがあります。CTC++はコンパイラに依存しません。他のプロファイルデータソースは、実行可能ファイルをビルドするために使用されるコンパイラにリンクされています。gcc/g++を使用してコンパイルしている場合、gcovおよびgprofデータファイルを作成し、それらをImagix 4Dにインポートすることができます。いくつかのネイティブコンパイラ環境には、同様のデータファイルを作成するためにtcovおよびgprofが含まれています。Microsoft Visual C++コンパイラの.NET以前のバージョンを使用している場合、Imagix 4Dはそれらが作成するプロファイラデータベースを受け入れます。

生成ならびにロードの対象となるデータソースは、確認が必要なメトリクスにより異なります:

カバレッジは、各関数が完全に実行された度合を表します。
組み込みコンパイラ必須: Testwell CTC++
gccコンパイラ必須: gcov、オプション: gprof
その他のネイティブコンパイラ必須: tcov、オプション: gprof
Visual C++ コンパイラ必須: プロファイラ(ラインカバレッジもしくはラインカウンティングタイプ)

実行時間は、各関数に費やされた時間を表します。
gccコンパイラ必須: gprof
その他のネイティブコンパイラ必須: gprof
Visual C++ コンパイラ必須: プロファイラ(関数タイミング型)

実行頻度は、各関数が実行された頻度を表します。
組み込みコンパイラ必須: Testwell CTC++
gccコンパイラ必須: gprof
その他のネイティブコンパイラ必須: gprof
Visual C++ コンパイラ必須: プロファイラ(任意の関数型)

プロファイルデータを有効にするコンパイル

プロファイル・データの生成は、実行可能コードのツール化や、プロファイルの結果を取得するファイルを作成するコンパイル / ビルドから始まります。

gcov、tcov、gprof の各データソースを利用する場合、ソースコードのコンパイル時に適切なオプションを指定しなければなりません。通常、使用する対応のコンパイル・オプションは次の通りです。

gcov--coverage (または、gcc 4.1.2以前では -fprofile-arcs -ftest-coverage)
tcov-a または -xa
gprof-pg (または、一部のネイティブUnixコンパイラでは -xpg)

上記のコンパイラ・オプションの一部は、-g オプションが設定されていると指定することができません。コンパイラ・オプションの使用に関する詳細は、ご利用のコンパイラのドキュメントを参照してください。

CTC++およびMicrosoft Visual C++の.NET以前のバージョンでプロファイラ情報を生成する方法については、それぞれのユーザーガイドを参照してください。

プロファイルデータの生成

適切なフラグを設定して再コンパイルした後、Imagix 4Dが解析するプロファイルデータを生成するためにソフトウェアを実行する必要があります。

これは、解析したい任意のテストケースを使用して実行ファイルを実行することで行われます。実行ファイルを実行すると、結果は自動的にMON.datファイル(CTC++)、.gcda/.daファイルおよびgmon.outファイル(gcc)、.dファイルおよびgmon.outファイル(ネイティブUnix)、または.pbtファイル(Visual C++)にキャプチャされます。

CTC++を除いて、Imagix 4Dを実行ファイルを実行したのと同じプラットフォームで実行している場合、Imagix 4Dは結果のデータファイルから直接プロファイルデータを収集できます。Imagix 4Dは、gprofや一部のMicrosoft Visual C++ユーティリティなど、そのプラットフォームで利用可能なネイティブツールを使用してデータファイルを処理します。

CTC++を使用している場合、またはプロファイルデータのクロスプラットフォーム解析を行いたい場合でも、Imagix 4Dはデータを読み込むことができます。この場合、実行ファイルのネイティブプラットフォームで実行時データファイルの初期処理を行う必要があります。Imagix 4Dは、その後、実行中の任意のプラットフォームで中間結果をインポートすることができます。

必要な後処理は、生成されたプロファイルデータの種類によって異なります。適切なコマンドはコマンドラインから発行できます。

CTC++ (MON.dat)ctcpost MON.sym MON.dat -x xml_results_file
gcov (各 .gcda または .daファイル)gcov -b sourcefilename.gcda
tcov (.dファイル)追加処理は不要です
gprof (gmon.out)gprof -b executable gmon.out > results_file
profile (executable_rootname.pbt)plist /t executable_rootname > results_file

詳細については、CTC++ユーザーガイド、gcovマニュアルページ、gprofマニュアルページ、またはMicrosoft Visual C++ユーザーガイドを参照してください。

プロファイル・データのインポート

データソースは、[データソース] ダイアログ([プロジェクト] > [データソース])を使用してロードします。

データソースをロードする順序には、制約があります。プログラムの構成情報は、プロファイル情報がロードされる前に、C/C++ ソースファイルによる解析方法のいずれかを使用して追加されなければなりません。これは Imagix 4D が、ソフトウェアの関数と呼び出し階層を保持する情報の上に、プロファイル情報をビルドするためです。これにより、例えば、gcov のファイル関連の結果を、より有用な関数関連の結果に変換することができます。また、[メトリクス] ディスプレイにおいては値として、各関数のプロファイル結果を確認することも可能となるのです。

gprof あるいはプロファイラ・データのインポート中に、実行ファイルを実行したプラットフォームで Imagix 4D を稼働させている場合は、プロファイル・データのロード方法として2つの選択肢があります。まず生データをインポートする場合には、[gprofデータファイル] もしくは [MSVCプロジェクトデータファイル] を使用します。次に、すでに事後処理を行った場合には、[gprof結果ファイル] もしくは [MSVCプロジェクト結果ファイル] を使用します。gcov に関しては、[カバレッジファイル] の設定内容により、事後処理を手動で行うか否かを判断してください。クロスプラットフォーム開発を行っている際の選択項目は、必然と事後処理された結果をインポートする方法に限定されます。

プロファイル・データ・ファイルの管理

CTC++には、複数のテストケース実行およびテストターゲットにわたる結果を統合するための広範な機能があり、それらはCTC++自体で管理するのが最適です。他のプロファイルソースについては、[プロファイルデータの管理]ダイアログの機能を使用して、一連のテストケースにわたって実行ファイルをプロファイルし、各実行の結果を保存し、関心のある実行または実行の組み合わせの結果を表示することができます。

これにより、さまざまなプロファイリング・ツールを扱う複雑さをある程度、緩和するのです。多重(または増分)実行の場合、tcov、gcov、gprof、MSVC プロファイラ・データ・コレクタは異なる挙動を取ります。gprof とプロファイラの場合は、実行ファイルを実行するたびに、データファイルがリセットされます。このため常に gmon.out と executable.pdt には、直前に実行したプロファイル・データのみが格納されます。gcov と tcov のケースでは、.gcda および .d ファイルはリセットされません。実行ファイルの多重実行を行うと、その結果は累積します。

[プロファイルデータの管理] ダイアログには、テストケースを実行する前に tcov データファイルをすべて、再初期化する機能があります。これを利用することによって gcov ならびに tcov データファイルに、以降のテストランの結果のみを反映することが可能となります。このため、テストケースごとに関連付けられたカバレッジを追跡し、解析することができるのです。このダイアログには、この他にも、プロファイル・データあるいは結果ファイルの現在のコンテンツを保存する機能があります。

これらの機能を活用すれば、連続してテストケースを実行する際、それぞれ実行する前に tcov データを再初期化し、実行が終了するたびに結果を記録することが可能です。その上で、[プロファイルデータの管理] ダイアログを使用し、確認したい結果を指定することができます。保存されている実行結果はすべて、個別、もしくはまとめた形で確認することが可能です。

以上の機能を使用するに際し、さまざまな利用形態が用意されています。ソフトウェアに特定の変更を加えることにより、コードのパフォーマンスに及ぼす影響を解析したい場合には、そのソフトウェアの異なるバージョンを用いた、同じテストケースの結果を比較する方法があります。また、一連のテストケース全体のカバレッジをまとめてから判断することで、テストの完全性を解析することが可能です。この他にも、特定のテストケースによるインクリメンタル・カバレッジを割り出すことによって、テストを最適化することができます。