JavaScript is required to for searching.
ナビゲーションリンクをスキップ
印刷ビューの終了
Oracle Solaris Studio 12.3 Discover および Uncover ユーザーズガイド     Oracle Solaris Studio 12.3 Information Library (日本語)
search filter icon
search icon

ドキュメントの情報

はじめに

1.  概要

2.  メモリーエラー探索ツール (Discover)

Discover を使用するための要件

バイナリは正しく準備される必要がある

プリロードまたは監査を使用するバイナリは使用できまい

標準メモリー割り当て関数を再定義するバイナリを使用できる

クイックスタート

準備されたバイナリの計測

共有ライブラリのキャッシュ

共有ライブラリの計測

ライブラリの無視

コマンド行オプション

出力オプション

計測オプション

キャッシュオプション

その他のオプション

bit.rc 初期化ファイル

SUNW_DISCOVER_OPTIONS 環境変数

SUNW_DISCOVER_FOLLOW_FORK_MODE 環境変数

計測済みバイナリの実行

Discover レポートの分析

HTML レポートの分析

「エラー (Errors)」タブの使用法

「警告 (Warnings)」タブの使用法

「メモリーリーク (Memory Leaks)」タブの使用法

コントロールパネルの使用法

ASCII レポートの分析

メモリーアクセスエラーと警告

メモリーアクセスエラー

ABR

ABW

BFM

BRP

DFM

FMR

FMW

FRP

IMR

IMW

OLP

PIR

SBR

SBW

UAR

UAW

UMR

メモリーアクセスの警告

AZS

Discover エラーメッセージの解釈

部分的に初期化されたメモリー

スペキュレイティブロード

未計測コード

Discover 使用時の制限事項

注釈付きコードのみが計測される

機械命令はソースコードとは異なる場合がある

コンパイラオプションは生成されたコードに影響を及ぼす

システムライブラリは報告されたエラーに影響を及ぼす可能性がある

カスタムメモリー管理はデータの正確さに影響を及ぼす可能性がある

静的および自動配列範囲外は削除できない

3.  コードカバレッジツール (Uncover)

索引

Discover 使用時の制限事項

注釈付きコードのみが計測される

Discover は、「「バイナリは正しく準備される必要がある」」の説明に従って準備されているコードのみを計測できます。注釈の付いていないコードは、バイナリにリンクされているアセンブリ言語コード、またはそのセクションに示されてるものより古いコンパイラまたはオペレーティングシステムでコンパイルされたモジュールから来ている場合があります。

準備から特別に除外されているのは、asm 文または .il テンプレートを含むアセンブリ言語モジュールおよび関数です。

機械命令はソースコードとは異なる場合がある

Discover は機械コード上で動作します。ツールは、ロードやストアなどの機械命令でエラーを検出し、それらのエラーをソースコードと相互に関連付けます。一部のソースコード文は関連付けられている機械命令がないため、Discover は明白なユーザーエラーを検出していないように思われる場合があります。たとえば、次の C コードフラグメントを考えてみましょう:

  int *p = (int *)malloc(sizeof(int));
  int i;

  i = *p;  /* compiler may not generate code for this statement */
  printf("Hello World!\n");

  return;

p で示されたアドレスに格納された値を読み取ることは、メモリーが初期化されていないため、潜在的なユーザーエラーとなります。ただし、最適化コンパイラは、変数 i が使用されていないことを検出するため、メモリーから読み取り、i に割り当てる文のコードは、生成されません。この場合、Discover は非初期化メモリーの使用 (UMR) を報告しません。

コンパイラオプションは生成されたコードに影響を及ぼす

コンパイラの生成コードは常に想定どおりになるわけではありません。コンパイラが生成するコードは、-On 最適化オプションを含む、使用するコンパイラオプションによって異なるため、Discover によって報告されるエラーも異なる可能性があります。たとえば、-O1 最適化レベルで生成されたコードで報告されるレポートは、-O4 最適化レベルで生成されたコードによって非表示になる可能性があります。

システムライブラリは報告されたエラーに影響を及ぼす可能性がある

システムライブラリは、オペレーティングシステムとともにインストール済みで、計測用に再度コンパイルできません。Discover は、標準の C ライブラリ (libc.so) からの一般的な関数に対するサポートを提供します。すなわち、Discover これらの関数によってどのメモリーにアクセスされ、どのメモリーが変更されるかを把握しています。ただし、アプリケーションが他のシステムライブラリを使用する場合、Discover レポートで擬陽性を検出する可能性がありあす。擬陽性が報告される場合、コードから Discover API を呼び出してそれらを削除できます。

カスタムメモリー管理はデータの正確さに影響を及ぼす可能性がある

Discover は、malloc()calloc()free()operator new()、および operator delete() などの標準のプログラミング言語メカニズムによって割り当てられている場合にヒープメモリーを検出できます。

アプリケーションが標準の関数の最上部で動作するカスタムメモリー管理システム (たとえば、malloc() とともに実装されるプール割り当て管理) を使用する場合、Discover は機能しますが、適切なリークの報告や、解放されたメモリーへのアクセスは保証されていません。

Discover は、次のメモリーアロケータをサポートしていません:

sigaltstack(2)() 関数はサポートされていません。

静的および自動配列範囲外は削除できない

配列範囲を検出するため Discover が使用するアルゴリズムのため、静的および自動 (ローカル) 配列の範囲外アクセスエラーを検出することはできません。動的に割り当てられた配列のエラーのみ検出できます。