Oracle® Solaris Studio 12.4: Discover および Uncover ユーザーズガイド

印刷ビューの終了

更新: 2015 年 12 月
 
 

パフォーマンスアナライザのカバレージレポートを理解する

デフォルトでは、カバレージディレクトリ上の uncover コマンドを実行すると、カバレージレポートが Oracle Solaris Studio パフォーマンスアナライザで実験として開きます。このセクションでは、カバレージデータを表示するパフォーマンスアナライザのインタフェースについて説明します。

パフォーマンスアナライザの詳細は、統合ヘルプおよびOracle Solaris Studio 12.4: パフォーマンスアナライザ を参照してください。

「概要」画面

パフォーマンスアナライザでカバレージレポートを開くと、「概要」画面が表示されます。このビューには、実行中の「実験」、実験の「メトリック」、および「メトリックのプレビュー」が表示されます。

次の図は、パフォーマンスアナライザの「概要」画面を示しています。

image:パフォーマンスアナライザの「概要」画面のカバレージ外レポート

「関数」ビュー

ナビゲーションパネルで「関数」ビューをクリックすると、プログラムの関数と排他的メトリックが表示されます。特定のメトリックの値に従ってデータをソートするには、目的の列見出しをクリックします。列ヘッダーの下にある矢印をクリックすると、ソート順が逆になります。

メトリックには次のようなものがあります。

bit_UNCV

関数でカバーできるバイト数を示す「カバレージ外」カウンタ。

bit_fcoun

どの関数がカバーされているかを示す「関数」カウンタ。

bit_E

関数内で命令が実行されたかどうかを示す「命令の実行」カウンタ。

bit_BCV_%

関数内でカバーされているブロックの割合を示す「カバーされているブロックの割合」カウンタ。

bit_ICV_%

関数内でカバーされている命令の割合を示す「カバーされている命令の割合」カウンタ。

次の図は、パフォーマンスアナライザ内の bit_UNCV でソートされたカバレージレポートを示しています。

image:パフォーマンスアナライザ内の Uncover レポートの「関数」ビュー

「カバレージ外」カウンタ (bit_UNCV)

bit_UNCV メトリックは、「カバレージ外」カウンタとも呼ばれ、uncover の非常に強力な機能です。この列を降順のソートキーとして使用する場合、最上部に表示される関数は、カバレージを増やす可能性がもっとも高い関数です。前の図では、test_for_memory_leak() 関数が bit_UNCV 列で最大数を持つため、リストの最上部に表示されています。function_with_small_functionality()test_for_doublefree()、および test_for_ves() 関数は同数を持つため、アルファベット順に一覧表示されています。

test_for_memory_leak() 関数の bit_UNCV の数は、関数が呼び出される原因となるスイートにテストが追加される場合に潜在的にカバーされる可能性のあるコードのバイト数です。カバレージが実際に増加する量は、関数の構造によって異なります。関数に分岐がなく、呼び出すすべての関数も直線関数である場合、カバレージは一定のバイト数で増加します。ただし、通常、カバレージの増加は潜在的に想定されるより (おそらくずっと) 少なくなります。

bit_UNCV 列の 0 以外の値を持つカバーされていない関数は、カバーされていないルート関数と呼ばれ、カバーされている関数によってすべて呼び出されることを意味します。カバーされていない非ルート関数によってのみ呼び出される関数は、独自のカバレージ外の数を持ちません。テストスイートは、潜在性の高いカバーされていない関数をカバーするように改良されるにつれて、これらの関数は、後続の実行で、カバーされるか、またはカバーされないことが明らかにされると想定されます。

カバレージ数は排他的ではありません。

「関数カウント」カウンタ (bit_fcoun)

bit_fcoun は、カバーされている関数とカバーされていない関数を報告します。数が 0 の場合、関数はカバーされません。数が 0 以外の場合、関数はカバーされます。関数の命令が実行される場合、関数はカバーされるとみなされます。

この列で、トップレベル以外のカバーされていない関数を検出できます。ある関数の bit_fcoun が 0 で、bit_UNCV も 0 である場合、その関数はトップレベルのカバーされている関数ではありません。

「命令の実行」カウンタ (bit_E)

bit_E カウンタは、カバーされている命令とカバーされていない命令を表示します。0 のカウントは命令が実行されないことを意味し、0 以外のカウントは命令が実行されることを意味します。

このカウンタは、各関数で実行される命令の総数を「関数」ビューに表示します。このカウンタは、「ソース」ビューと「逆アセンブリ」ビューにも表示されます。

「カバーされているブロックの割合」カウンタ (bit_BCV_%)

bit_BCV_% は、カバーされている関数内の基本的なブロックの割合を関数ごとに表示する「カバーされているブロックの割合」カウンタです。この数値は、関数がどの程度カバーされているかを示します。「合計」行のこの数は無視してください。これは列のパーセンテージの合計であり、意味がありません。

「カバーされている命令の割合」カウンタ (bit_ICV_%)

bit_ICV_% カウンタは、カバーされている関数内の命令の割合を関数ごとに表示します。この数値は、関数がどの程度カバーされているかを示します。「合計」行のこの数は無視してください。これは列のパーセンテージの合計であり、意味がありません。

「ソース」ビュー

–g オプションを使用してバイナリをコンパイルすると、「ソース」ビューにプログラムのソースコードが表示されます。uncover はバイナリレベルでプログラムを計測しますが、最適化してプログラムをコンパイルしているため、このビューのカバレージ情報は解釈するのが困難な場合があります。

「ソース」ビューの包括的 bit_E カウンタには、各ソース行で実行される命令の総数が表示され、これは基本的に文レベルのコードカバレージ情報です。0 以外の値は、文がカバーされていることを意味します。0 の値は、文がカバーされていないことを意味します。変数宣言およびコメントには bit_E カウントがありません。

次の図は、開かれた「ソース」ビューの例を示しています。

image:パフォーマンスアナライザの Uncover レポートの「ソース」ビュー

関連付けられたカバレージ情報がないソースコード行については、行が空白になり、どのフィールドにも数値が表示されません。これらの空の行は、次の理由で発生します。

  • コメント、空行、宣言など、実行可能コードを含んでいない言語構造。

  • 次のいずれかの理由で、コンパイラの最適化によって行に対応するコードが削除された。

    • コードは実行されることがない (デッドコード)。

    • コードは実行可能であるが冗長。

詳細は、uncover 使用時の制限事項を参照してください。

「逆アセンブリ」ビュー

「ソース」ビューで行を選択してから「逆アセンブリ」ビューを選択すると、パフォーマンスアナライザはバイナリ内の選択された行を検出し、その逆アセンブリを表示しようとします。


ヒント  -  「ビュー」ペインに「逆アセンブリ」が表示されない場合は、「詳細ビュー...」を選択して「逆アセンブリ」オプションをオンにします。

このビューの bit_E カウンタには、各命令が実行された回数が表示されます。

image:パフォーマンスアナライザの Uncover レポートの「逆アセンブリ」ビュー

「命令頻度」ビュー

「命令頻度」ビューには、全体的なカバレージのサマリーが表示されます。

image:パフォーマンスアナライザの Uncover レポートの「命令頻度」ビュー