Uncover を使用してカバレージ情報を生成するには、3 ステップのプロセスがあります。
このセクションでは、Uncover を使用する 3 つのステップと、Uncover の使用例について説明します。
入力バイナリは、実行可能ファイルまたは共有ライブラリとすることができます。個別に分析するバイナリごとに計測を行う必要があります。
uncover コマンドを使用してバイナリを計測します。たとえば、次のコマンドは、バイナリ a.out を計測し、入力の a.out を計測済みの a.out で上書きします。また、このコマンドは、接尾辞 .uc を持つディレクトリ (この場合は a.out.uc) を作成します。この中に、カバレージデータが収集されます。入力バイナリのコピーはこのディレクトリに保存されます。
バイナリ a.out と共有ライブラリ mylib.so がある場合、次のように計測します。
$ uncover a.out $ uncover mylib.so
バイナリに計測機構を組み込むとき、次のオプションを使用できます。
命令、ブロック、および関数の実行カウントの報告を有効にします。デフォルトでは、カバーされているコードまたはカバーされていないコードの情報だけが報告されます。バイナリに計測機構を組み込むときとカバレージレポートを生成するときの両方で、このオプションを指定します。
directory 内にカバレージデータディレクトリを作成します。uncover では、使用の 3 つのフェーズすべてでまったく同じディレクトリにアクセスする必要があるため、このオプションは特に重要です。<full_path_of_coverage_directory> とともに使用される –d オプションは、uncover のさまざまなフェーズで同じ場所のカバレージディレクトリを検索するようにします。–d をフルパス名とともに使用しない場合、カバレージディレクトリの検索で不一致が発生することがあり、複数のプロファイルディレクトリに不完全な情報が含まれるなどの問題も発生します。
–c 実行時オプションを使用して実行カウントを収集するときに、スレッドセーフなプロファイリングを有効または無効にします。このオプションは、–c オプションともに使用する必要があります。そうしない場合、効果はありません。–c オプションにより、デフォルトでスレッドセーフなプロファイルのカウントが有効になります。デフォルトでは on に設定されます。シングルスレッドアプリケーションのプロファイルカウントを収集するには、–c –m off オプションを使用します。これは、シングルスレッドアプリケーションには不要であり、プロファイルの高速な実行を可能にするスレッドセーフティー機能をオフにします。
指定されたファイルに計測機構付きバイナリファイルを書き込みます。デフォルトでは、入力バイナリファイルが計測機構付きファイルで上書きされます。
すでに計測されている入力バイナリ上で uncover コマンドを実行すると、uncover はすでに計測されているためバイナリを計測できないことと、そのバイナリを実行してカバレージデータを生成できることを示すエラーメッセージを発行します。
バイナリを計測したあとで、それを正常に実行できます。計測済みバイナリを実行するたびに、コードカバレージデータは、uncover が計測中に作成した .uc 接尾辞を持つカバレージデータディレクトリに収集されます。uncover のデータコレクションはマルチスレッドおよびマルチプロセスに対して安全であるため、プロセスの同時実行またはスレッド数に制限はありません。カバレージデータは実行およびスレッドのすべてにわたって蓄積されます。
カバレージレポートを生成するには、カバレージデータディレクトリ上で uncover コマンドを実行します。バイナリ a.out および共有ライブラリ mylib.so を使用した場合の例:
$ uncover a.out.uc $ uncover mylib.so.uc
このコマンドは、a.out.uc ディレクトリのカバレージデータから binary-name.er と呼ばれる Oracle Developer Studio パフォーマンスアナライザ実験ディレクトリを生成し、パフォーマンスアナライザ GUI を起動して、実験を表示します。現在のディレクトリまたはホームディレクトリに .er.rc ファイルがある場合は、パフォーマンスアナライザが実験を表示する方法に影響を及ぼすことがあります。.er.rc ファイルの詳細は、Oracle Developer Studio 12.5: パフォーマンスアナライザを参照してください。
レポートは、HTML 形式で生成して Web ブラウザに表示するか、ASCII 形式で生成して端末ウィンドウに表示できます。また、コードアナライザで分析して表示するためのディレクトリにデータを転送することもできます。
コードアナライザで使用できるように、エラーデータを binary-name.analyze/coverage ディレクトリに書き込みます。
命令、ブロック、および関数の実行カウントの報告を有効にします。デフォルトでは、カバーされているコードまたはカバーされていないコードの情報だけが報告されます。(バイナリに計測機構を組み込むときとカバレージレポートを生成するときの両方で、このオプションを指定します。)
カバレージレポート用の実験ディレクトリを生成し、パフォーマンスアナライザ GUI で実験を表示するかどうかを決定します。デフォルトは on です。
カバレージデータを指定のディレクトリに HTML 形式で保存し、それを Web ブラウザで自動的に表示します。
ヘルプを表示します。
カバレージレポートを生成しますが、パフォーマンスアナライザや Web ブラウザなどのビューアを起動しません。
指定されたファイルで ASCII カバレージレポートを生成します。
uncover バージョンを出力して終了します。
冗長。Uncover が実行する内容のログを出力します。
1 つの出力形式のみが有効になります。複数の出力オプションを指定すると、uncover はコマンド内の最後のオプションを使用します。
使用例 3 uncover コマンドの例$ uncover a.out
このコマンドは、バイナリ a.out を計測し、入力 a.out を上書きして、現作業ディレクトリに a.out.uc カバレージデータディレクトリを作成し、a.out.uc ディレクトリに入力 a.out のコピーを保存します。a.out がすでに計測されている場合、警告メッセージが表示され、計測は実行されません。
$ uncover mylib.so
このコマンドは、共有ライブラリ mylib.so を計測し、入力 mylib.so を上書きして、現在のディレクトリに mylib.so.uc カバレージデータディレクトリを作成し、mylib.so.uc ディレクトリに入力 mylib.so のコピーを保存します。mylib.so がすでに計測されている場合は、警告メッセージが表示され、計測は実行されません。
$ uncover -d coverage a.out
このコマンドは、a.out.uc カバレージディレクトリをディレクトリ coverage に作成します。
$ uncover a.out.uc
このコマンドは、a.out.uc カバレージディレクトリのデータを使用して、作業ディレクトリにコードカバレージの実験 (a.out.er) を作成し、パフォーマンスアナライザを起動してその実験を表示します。
$ uncover mylib.so.uc
このコマンドは、mylib.so.uc カバレージディレクトリのデータを使用して、作業ディレクトリにコードカバレージの実験 mylib.so.er を作成し、パフォーマンスアナライザを起動してその実験を表示します。
$ uncover -H a.out.html a.out.uc
このコマンドは、a.out.uc カバレージディレクトリのデータを使用して、ディレクトリ a.out.html に HTML コードカバレージレポートを作成し、Web ブラウザにレポートを表示します。
$ uncover -t a.out.txt a.out.uc
このコマンドは、a.out.uc カバレージディレクトリのデータを使用して、ファイル a.out.txt に ASCII コードカバレージレポートを作成します。
$ uncover -a a.out.uc
このコマンドは a.out.uc カバレージディレクトリ内のデータを使用して、コードアナライザで使用するためのカバレージレポートを binary-name.analyze/coverage ディレクトリ内に作成します。
アプリケーション内の各バイナリは別個に計測する必要があります。たとえば、アプリケーションに実行可能ファイル a.out と共有ライブラリ libfoo.so がある場合、両方のカバレージを受け取るためにそれぞれを計測する必要があります。
このコマンドは、実行可能ファイル a.out と共有ライブラリ libfoo.so を計測します。
% uncover -d <coverage_dir> a.out % uncover -d <coverage_dir> libfoo.so
このコマンドは、アプリケーションを実行して、<coverage_dir>/a.out.uc と <coverage_dir>/libfoo.so.uc でカバレージデータを収集します。
% ./a.out
このコマンドは、実行可能ファイル a.out を表示します。
% uncover <coverage_dir>/a.out.uc
このコマンドは、共有ライブラリ libfoo.so のカバレージを表示します。
% uncover <coverage_dir>/libfoo.so.uc