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

印刷ビューの終了

更新: 2014 年 10 月
 
 

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

静的データを収集したかどうかにかかわらず、アプリケーションをコンパイルし、計測機構を組み込み、実行して、動的メモリーアクセスデータを収集できます。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 を閉じます。