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 コマンドを使用して、バイナリを計測します。たとえば、次のコマンドは、バイナリ a.out を計測し、入力 a.out を計測済みの a.out で上書きします。

discover a.out

計測済みのバイナリを実行する場合、Discover はプログラムのメモリーの使用を監視します。実行時に、Discover は Web ブラウザで表示可能な HTML ファイル (この場合、デフォルトで a.out.html) にメモリーアクセスエラーを詳述するレポートを書き込みます。バイナリを計測してレポートを ASCII ファイルまたは stderr に書き込むように要求する場合は、-w オプションを使用できます。

-n オプションを使用すると、Discover でバイナリに書き込み専用の計測を行うように指定できます。

Discover がバイナリを計測する際に、注釈が付けられていないために計測できないコードを検出する場合、次のような警告が表示されます。

discover: (warning): a.out: 80% of code instrumented (16 out of 20 functions)

注釈付きではないコードは、バイナリにリンクされているアセンブリ言語コード、またはコンパイラでコンパイルされたモジュール、または「バイナリは正しく準備される必要がある」にリストされているシステムより古いオペレーティングシステム上から来ている可能性があります。

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

Discover がバイナリを計測する際には、コードを追加し、実行時リンカーを使用して、実行時にロードされる場合には依存共有ライブラリを計測できるようにします。計測済みライブラリは、元のライブラリが最後に計測されてから変更されていない場合には再使用可能なキャッシュに格納されます。デフォルトでは、キャッシュディレクトリは $HOME/SUNW_Bit_Cache です。このディレクトリは -D オプションを使用して変更できます。

共有ライブラリの計測

すべての共有ライブラリを含む、プログラム全体が計測される場合、Discover は最も正確な結果を生成します。デフォルトでは、Discover は実行可能ファイルのメモリーエラーだけを検査して報告します。-c オプションを使用すると、依存共有ライブラリおよび dlopen() によって動的に開かれたライブラリのエラーを Discover で検査するように指定できます。-n オプションを使用すると、Discover で実行可能ファイルのエラーの検査をスキップするように指定できます。

-c オプションを使用して特定のライブラリのエラー検査を無効にすると、Discover はそのライブラリのエラーを報告しません。ただし、Discover はメモリーエラーを正しく検出するためにアドレス空間全体のメモリー状態を追跡する必要があるため、すべての共有ライブラリも含めたプログラム全体で割り当てとメモリーの初期化を記録します。

プログラムで使用されるすべての共有ライブラリは、「バイナリは正しく準備される必要がある」で説明されているように準備される必要があります。デフォルトで、実行時リンカーが準備されていないライブラリを検出する場合、致命的なエラーが発生します。ただし、Discover に 1 つ以上のライブラリを無視するように指示できます。

ライブラリの無視

一部のライブラリは、準備できないか、または何らかの理由で計測できない場合があります。このような場合に、多少、正確さを低下させるために、-s-T、または -N オプション (「「計測オプション」」を参照)、bit.rc ファイル (「bit.rc 初期化ファイル」」を参照) の仕様を使用して、Discover にこれらのライブラリを無視するように指示できます。

ライブラリが計測できず、「無視可能」と指定されていない場合、Discover は計測時に失敗するか、またはプログラムが実行時にエラーメッセージを伴って失敗します。

デフォルトで、Discover はシステムの bit.rc ファイルの仕様を使用して、特定のシステムおよびコンパイラが提供するライブラリを、準備されていないため「無視可能」として設定します。Discover は最も一般的に使用されるライブラリのメモリー特性を知っているため、正確さに対する影響は最小限です。

コマンド行オプション

discover コマンドとともに次のオプションを使用して、バイナリを計測できます。

出力オプション

-a

コードアナライザで使用するためにエラーデータを binary_name.analyze/dynamic ディレクトリに書き込みます。

-b browser

計測機構の組み込まれたプログラムを実行するとき、Web ブラウザ browser を自動的に起動します (デフォルトでは off)。

-o file

計測済みのバイナリを file に書き込みます。デフォルトで、計測済みのバイナリは入力バイナリを上書きします。

-w text_file

バイナリ上の Discover のレポートを text_file に書き込みます。計測済みのバイナリを実行するときに、ファイルが作成されます。text_file が相対パス名である場合、ファイルは計測済みバイナリを実行する作業ディレクトリを基準として相対的に配置されます。バイナリを実行するたびにファイル名を一意にするには、文字列 %p をファイル名に追加して、Discover ランタイムにプロセス ID を含めるように求めます。たとえば、オプション -w report.%p.txtreport.process_id.txt を持つレポートファイルを生成します。2 回以上、ファイル名に %p を含む場合、最初のインスタンスだけがプロセス ID と置き換えられます。

このオプションまたは -H オプションを指定しない場合、レポートは HTML 形式で output_file.html に書き込まれます。output_file は、計測済みバイナリのベース名です。ファイルは、計測済みバイナリを実行する作業ディレクトリに配置されます。

このオプションおよび -H オプションを両方指定して、テキストおよび HTML 形式の両方でレポートを書き込みます。

-H html_file

Discover のバイナリのレポートを HTML 形式で html_file に書き込みます。このファイルは計測済みバイナリの実行時に作成されます。html_file が相対パス名である場合、計測済みバイナリを実行する作業ディレクトリを基準として相対的に配置されます。バイナリを実行するたびにファイル名を一意にするには、文字列 %p をファイル名に追加して、Discover ランタイムにプロセス ID を含めるように求めます。たとえば、オプション -H report.%p.html は、ファイル名 report.process_id.html を持つレポートファイルを生成します。2 回以上、ファイル名に %p を含む場合、最初のインスタンスだけがプロセス ID と置き換えられます。

このオプションまたは -w オプションを指定しない場合、レポートは HTML 形式で output_file.html に書き込まれます。output_file は計測済みバイナリのベース名です。ファイルは、計測済みバイナリを実行する作業ディレクトリに配置されます。

このオプションおよび -w オプションを指定して、テキストおよび HTML ファイル形式の両方でレポートを書き込むことができます。

-e n

レポートに n メモリーエラーのみを表示します (デフォルトでは、すべてのエラーを表示します)。

-E n

レポートに n メモリーリークのみを表示します (デフォルトは 100 です)。

-f

レポートのオフセットを表示します (デフォルトは非表示です)。

-m

レポートの符号化された名前を表示します (デフォルトは符号化されていない名前の表示です)。

-S n

レポートに n スタックフレームのみを表示します (デフォルトは 8 です)。

計測オプション

-c [ - | library | file ]

すべてのライブラリ、指定された library、または指定された file に列挙されているライブラリのエラーを検査します。

-n

実行可能ファイルのエラーを検査しません。

-l

Discover を簡易モードで実行します。このオプションは、プログラムのより高速な実行を提供し、「バイナリは正しく準備される必要がある」で説明されるように、プログラムが特別に準備される必要はないが検出されるエラー数は制限されます。

-F [parent | child]

Discover で計測機構を組み込んだバイナリが実行中にフォークした場合に行う処理を指定します。デフォルトでは、Discover は親プロセスからメモリーアクセスエラーのデータを収集し続けます。Discover でフォークを追尾し、子プロセスからメモリーアクセスデータを収集するには、-F child を指定します。

-i

スレッドアナライザを使用してデータ競合を検出するために計測します。このオプションを使用する場合は、データ競合検出のみが実行時に行われ、他のメモリー検査は行われません。計測機構付きバイナリを collect コマンドを使用して実行し、パフォーマンスアナライザで表示可能な実験を生成する必要があります (『Oracle Solaris Studio 12.3: スレッドアナライザユーザーズガイド』を参照)。

-s

計測不可能なバイナリの計測を試みる場合は、警告を発するが、エラーのフラグは立てないでください。

-T

指定されたバイナリのみを計測します。依存共有ライブラリを実行時に計測しないでください。

-N library

接頭辞 library に一致する依存共有ライブラリを計測しないでください。ライブラリ名の最初の文字が library に一致する場合、ライブラリは無視されます。library が / で始まる場合、ライブラリの完全な絶対パス名でマッチングが行われます。それ以外の場合、ライブラリのベース名でマッチングが行われます。

-K

bit.rc 初期化ファイルを読み取らないでください (「bit.rc 初期化ファイル」」を参照)。

キャッシュオプション

-D cache_directory

キャッシュされた計測済みバイナリを格納するためのルートディレクトリとして cache_directory を使用します。デフォルトでは、キャッシュディレクトリは $HOME/SUNW_Bit_Cache です。

-k

キャッシュで検出されたライブラリの再計測を強制します。

その他のオプション

-h または -?

ヘルプ。短いヘルプメッセージを出力して、終了します。

-v

冗長。Discover が実行している内容のログを出力します。詳細については、オプションを繰り返してください。

-V

Discover バージョン情報を出力して終了します。

bit.rc 初期化ファイル

Discoverは、起動時に一連の bit.rc ファイルを読み取ることによってその状態を初期化します。システムファイル、Oracle_Solaris_Studio_installation_directory /prod/lib/postopt/bit.rc は、特定の変数のデフォルトの値を提供します。Discover は最初にこのファイルを読み取り、次に、存在する場合は $HOME/.bit.rc 、および存在する場合は current_directory/.bit.rc を読み取ります。

bit.rc ファイルには特定の変数を設定、追加、または削除するコマンドが含まれています。Discover が set コマンドを読み取る場合、変数の前の値がある場合には、それを無効にします。append コマンドを読み取る場合、変数の既存の値に (コロンセパレータの後に) 引数を追加します。remove コマンドを読み取る場合、変数の既存の値から引数とそのコロンセパレータを削除します。

bit.rc ファイルの変数セットには、計測時に無視するライブラリのリスト、およびバイナリ内の注釈の付いていない (準備されていない) コードの割合を計算する場合に無視する関数または関数接頭語のリストが含まれます。

詳細については、システム bit.rc ファイルのヘッダーのコメントを参照してください。

SUNW_DISCOVER_OPTIONS 環境変数

SUNW_DISCOVER_OPTIONS 環境変数をコマンド行オプション -b-e-E-f-F-H-l-L-m-S、および -w のリストに設定することによって、計測機構付きバイナリの実行時動作を変更できます。たとえば、レポートされるエラー数を 50 に変更し、レポート内のスタックの深さを 3 に制限する場合、環境変数を -e 50-s 3 に設定します。

SUNW_DISCOVER_FOLLOW_FORK_MODE 環境変数

デフォルトでは、Discover で計測機構を組み込んだバイナリが実行中にフォークした場合、Discover は親プロセスからメモリーアクセスエラーのデータを収集し続けます。Discover でフォークを追尾し、子プロセスからメモリーアクセスデータを収集するには、SUNW_DISCOVER_FOLLOW_FORK_MODE 環境変数を設定します。