Oracle® Solaris Studio 12.4: 概要

印刷ビューの終了

更新: 2014 年 12 月
 
 

メモリーエラーを検出するための discover ツール

メモリーエラー探索ツール (discover) は、プログラム内のメモリーアクセスエラーを検出するための高度な開発ツールです。–g を指定してバイナリをコンパイルすると、discover はエラーおよび警告をレポートする際にソースコードおよび行番号情報を表示できるようになります。

discover ユーティリティーは簡単に使用できます。–g を指定してバイナリをコンパイルしてから、そのバイナリに対して discover コマンドを実行して計測機構を組み込みます。その後、計測機構の組み込まれたバイナリを実行して、discover レポートを生成します。discover レポートは、HTML 形式、テキスト形式、またはその両方で要求できます。レポートにはメモリーエラー、警告、およびメモリーリークが表示され、各エラーまたは警告についてソースコードとスタックトレースを表示することもできます。

discover(1) のマニュアルページにある次の例は、メモリーアクセスエラーを検出するための discover レポートを生成するために、実行可能ファイルを準備し、計測機構を組み込み、実行する方法を示しています。discover のコマンド行の –w オプションはレポートをテキストとして書き出すことを示し、–o オプションは出力を画面に表示することを示します。

% cc -g -O2 test.c -o test.prep
% discover -w - -o test.disc test.prep
% ./test.disc
ERROR (UMR): accessing uninitialized data from address 0x5000c (4 bytes) at:
     foo() + 0xdc  <ui.c:6>
          3:    int *t;
          4:    foo() {
          5:     t = malloc(5*sizeof(int));
          6:=>   printf("%d0, t[1]);
          7:    }
          8:
          9:    main()
     main() + 0x1c
     _start() + 0x108
    block at 0x50008 (20 bytes long) was allocated at:
     malloc() + 0x260
     foo() + 0x24  <ui.c:5>
          2:
          3:    int *t;
          4:    foo() {
          5:=>   t = malloc(5*sizeof(int));
          6:     printf("%d0, t[1]);
          7:    }
          8:
     main() + 0x1c
     _start() + 0x108

     ***************** Discover Memory Report *****************

1 block at 1 location left allocated on heap with a total size of 20 bytes

    1 block with total size of 20 bytes
     malloc() + 0x260
     foo() + 0x24  <ui.c:5>
          2:
          3:    int *t;
          4:    foo() {
          5:=>   t = malloc(5*sizeof(int));
          6:     printf("%d0, t[1]);
          7:    }
          8:
     main() + 0x1c
     _start() + 0x108

詳細は、discover(1) のマニュアルページとOracle Solaris Studio 12.4: Discover および Uncover ユーザーズガイド を参照してください。