Oracle® Developer Studio 12.5: コードアナライザチュートリアル

印刷ビューの終了

更新: 2016 年 6 月
 
 

データの収集と表示

コードアナライザのツールを使用して、3 種類までのデータを収集できます。

静的エラーデータの収集と表示

–xprevise コンパイラオプションを使用してバイナリを構築すると、コンパイラは静的エラーを自動的に抽出し、データをソースコードと同じディレクトリの binary-name.analyze ディレクトリの static サブディレクトリに書き込みます。コンパイラで検出される静的エラーの種類のリストについては、静的コードの問題を参照してください。

  1. sample ディレクトリで、次のように入力してアプリケーションを構築します。


    注 -  –xprevise オプションは、非推奨となった –xanalyze=code と同じです。
    • Oracle Solaris の場合:

      $ cc -xprevise main.c previse*.c sample1.c sample2.c sample3.c
    • Oracle Linux の場合:

      $ cc -xannotate -xprevise main.c previse*.c sample1.c sample2.c sample3.c

    注 -  チュートリアルのこの部分では sample4.c をコンパイルしません。

    静的エラーデータが sample/a.out.analyze/static ディレクトリに書き込まれます。

  2. コードアナライザ GUI を起動して結果を表示します。

    $ code-analyzer a.out &
  3. コードアナライザ GUI が開き、コンパイル時に見つかった静的コードの問題が「結果」タブに表示されます。「結果」タブの左上にあるテキストは、13 件の静的コードの問題が検出されたことを示しています。

    image:静的な問題が表示されたコードアナライザの「結果」タブ

    タブでは、各問題について、問題の種類、問題が見つかったソースファイルのパス名、およびそのファイルの該当するソース行を強調表示したコードスニペットが表示されます。

  4. 最初の問題、「メモリーの二重解放」エラーの詳細を表示するには、エラーアイコン image:エラーアイコン をクリックします。

    問題のスタックトレースが開き、エラーパスが表示されます。

    image:エラーパスが表示された「メモリーの二重解放」エラー

    スタックトレースを開くと、問題の右上隅に表示されているアイコンが image:未確認アイコン から、問題を確認したことを示す image:確認済みアイコン に変わることがわかります。


    注 -  確認済みの問題を非表示にするには、「結果」タブの上部にある「確認済み」ボタン image:レビュー済み課題を非表示ボタン をクリックします。ボタンを再度クリックすると、問題の非表示が解除されます。
  5. 同じエラーアイコンをクリックして、スタックトレースを閉じます。

  6. 「初期化されていないメモリーの読み取り」警告の 1 つの警告アイコン image:警告アイコン をクリックして、スタックトレースを開きます。

    この問題のエラーパスには、「メモリーの二重解放」問題のエラーパスよりもはるかに多くの関数呼び出しが含まれています。

  7. 最初の関数呼び出しをダブルクリックします。

    ソースファイルが開き、その呼び出しが強調表示されます。エラーパスは、ソースコードの下の詳細ウィンドウに表示されます。

    image:関数呼び出しが強調表示されたソースコードウィンドウとその下に表示されたエラーパス
  8. エラーパス内のその他の関数呼び出しをダブルクリックしていくと、エラーにつながったパスをコード内で追尾できます。

  9. 問題の説明の左側にある情報ボタン image:情報ボタン をクリックして、UMR エラータイプに関する詳細情報を確認します。

    コード例や考えられる原因などを含め、エラータイプの説明がオンラインヘルプブラウザに表示されます。

  10. 右上隅の X をクリックしてコードアナライザ GUI を閉じます。

動的メモリー使用データの収集と表示

静的データを収集したかどうかにかかわらず、アプリケーションをコンパイルし、計測機構を組み込み、実行して、動的メモリーアクセスデータを収集できます。discover で計測機構を組み込んでからアプリケーションを実行することによって検出される動的メモリーアクセスエラーのリストについては、動的メモリーアクセスの問題を参照してください。

  1. sample ディレクトリで、サンプルアプリケーションを –g オプションで構築します。

    このオプションではデバッグ情報が生成され、エラーおよび警告に関するソースコードおよび行番号情報をコードアナライザで表示できるようになります。

    • Oracle Solaris の場合:

      $ cc -g main.c previse*.c sample1.c sample2.c sample3.c
    • Oracle Linux の場合:

      $ cc -xannotate -g main.c previse*.c sample1.c sample2.c sample3.c

    注 -  チュートリアルのこの部分では sample4.c をコンパイルしません。
  2. すでに計測機構の付いたバイナリに計測機構を組み込むことはできないため、カバレージデータの収集時に使用するバイナリのコピーを保存します。

    $ cp a.out a.out.save
  3. discover でバイナリに計測機構を組み込みます。

    $ discover -a a.out
  4. 計測機構付きバイナリを実行して動的メモリーアクセスデータを収集します。

    $ ./a.out

    動的メモリーアクセスエラーデータが sample/a.out.analyze/dynamic ディレクトリに書き込まれます。

  5. コードアナライザ GUI を起動して結果を表示します。

    $ code-analyzer a.out &
    image:静的エラーと動的エラーが表示されたコードアナライザの「結果」タブ

    「結果」タブに、静的な問題と動的メモリーの問題の両方が表示されます。問題の説明の背景色は、静的コードの問題 (褐色) または動的メモリーアクセスの問題 (淡い緑) のいずれであるかを示しています。

  6. 結果をフィルタリングして動的メモリーの問題だけを表示するには、「問題」タブで「動的」オプションを選択します。

    image:動的な問題のチェックボックスにチェックマークが表示された「問題」タブ

    「結果」タブに、中核となる 3 件の動的メモリーの問題だけが表示されます。


    注 -  中核となる問題とは、それらを修正すればほかの問題も解消される可能性の高い問題のことです。通常、中核となる問題には、「すべて」のビューで一覧表示される問題のいくつかが関連しており、たとえば、それらの問題では割り当てポイントが共通であったり、問題が同じ関数の同じデータアドレスで発生したりするためです。
  7. すべての動的メモリーの問題を表示するには、「問題」タブの上部にある「すべて」ラジオボタンを選択します。「結果」タブに、6 件の動的メモリーの問題が表示されます。

    image:6 件の動的メモリーの問題が表示されたコードアナライザの「結果」タブ

    表示に追加された 3 件の問題を調べ、中核となる問題にどのように関連しているかを確認します。表示されている最初の問題の原因を修正すれば、2 番目と 3 番目の問題も解消される可能性があります。

    最初の問題を調査している間、ほかの動的メモリーアクセスの問題を非表示にするには、各問題の「無視」ボタン image:無視ボタン をクリックします。


    注 -  「結果」タブの上部にある「無視」ボタンをクリックすると、終了した問題をあとでふたたび表示できるようになります。
  8. エラーアイコンをクリックしてスタックトレースを表示し、最初の問題を調査します。

    この問題の場合、スタックトレースには呼び出しスタックと割り当てスタックが含まれます。

    image:「非初期化メモリーからの読み取り」エラーのスタックトレース
  9. スタック内の関数呼び出しをダブルクリックして、ソースファイル内の関連する行を表示します。

    ソースファイルが開くと、ファイルの下の詳細ウィンドウにスタックトレースが表示されます。

    image:「非初期化メモリーからの読み取り」エラーのソースファイルと詳細ウィンドウ
  10. 右上隅の X をクリックしてコードアナライザ GUI を閉じます。

コードカバレージデータの収集と表示

静的データまたは動的メモリーアクセスデータを収集したかどうかにかかわらず、アプリケーションをコンパイルし、計測機構を組み込み、実行して、コードカバレージデータを収集できます。動的メモリーエラーデータを収集する前に –g オプションでアプリケーションを構築した際には、計測機構を組み込む前にバイナリのコピーを保存していることになります。

  1. カバレージデータ収集のために計測機能を組み込むよう、保存バイナリをコピーします。

    $ cp a.out.save a.out
  2. uncover でバイナリに計測機構を組み込みます。

    $ uncover a.out
  3. 計測機構付きバイナリを実行してコードカバレージデータを収集します。

    $ ./a.out

    コードカバレージデータが、sample ディレクトリ内の a.out.uc ディレクトリに書き込まれます。

  4. a.out.uc ディレクトリに対して uncover を実行します。

    $ uncover -a a.out.uc

    コードカバレージデータが sample/a.out.analyze/uncover ディレクトリに書き込まれます。

  5. コードアナライザ GUI を起動して結果を表示します。

    $ code-analyzer a.out &

    「結果」タブに、静的な問題、動的メモリーの問題、およびコードカバレージの問題が表示されます。

  6. 結果をフィルタリングしてコードカバレージの問題だけを表示するには、「問題」タブで「カバレージ」オプションを選択します。

    「結果」タブに、12 件のコードカバレージの問題だけが表示されます。各問題の説明には、潜在的なカバレージの割合が含まれています。この割合は、該当する関数をカバーするテストを追加した場合にアプリケーションの合計カバレージが何パーセント増加するかを示しています。

    image:いくつかのコードカバレージの問題が表示されたコードアナライザの「結果」タブ

    ヒント  -  上下にスクロールすることなくすべての問題を表示するには、「結果」タブの上部にある「スニペット」ボタン image:「スニペットを非表示」ボタン をクリックしてコードスニペットを非表示にします。

    「問題」タブでは、カバレージの問題の 9 件が previse_all.c ソースファイル、3 件が sample2.c、および 1 件が previse_1.c に含まれています。

  7. sample2.c ファイルの問題だけを表示するには、「問題」タブでそのファイルのオプションを選択します。

    この時点で、「結果」タブには、sample2.c で見つかった 3 件のコードカバレージの問題だけが表示されます。

    image:sample2.c のコードカバレージエラーが表示されたコードアナライザの「結果」タブ
  8. いずれかの問題でソースファイルパスのリンクをクリックして、ソースファイルを開きます。左の余白に警告アイコンが現れるまで、ソースファイルを下へスクロールします。

    image:カバーされていないコードが含まれているソースファイルの部分とカバレージの問題の警告アイコン

    カバーされていないコードは黄色の各括弧でマークされます。

    ファイルで見つかったカバレージの問題は、警告アイコン image:問題警告アイコン でマークされます。