Oracle Developer Studio は、アプリケーションの安定性を検証するためのツールを備えています。次のツールは、動的分析、静的分析、およびコードカバレージ分析の組み合わせにより、メモリーリークやメモリーアクセス違反などのアプリケーションの脆弱性を検出します。
コード内のメモリーアクセスエラーの検出に役立つコマンド行ユーティリティーです。
テストによってカバーされないアプリケーションコードの領域を示すコマンド行ユーティリティーです。
C および C++ コンパイラによって収集された静的コードエラーデータと、discover および uncover によって収集されたデータを分析するグラフィカルツールです。コードアナライザでは、静的エラーデータを動的メモリーアクセスエラーデータおよびコードカバレージデータと統合することで、ほかのエラー検出ツールを単独で使用した場合には見つからないアプリケーション内のエラーを検出できます。
コードアナライザと同様の機能を提供するコマンド行ユーティリティー。
メモリーエラー探索ツール (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 Developer Studio 12.6: Discover および Uncover ユーザーズガイドを参照してください。
uncover はコードカバレージを測定するためのコマンド行ツールです。このツールは、アプリケーションの実行時に実行されるアプリケーションコードの領域と、実行されず、テストによってカバーされない領域を示します。Uncover は、テスト時により多くのコードがカバーされるように、テストスイートにどの関数を追加する必要があるかの判断に役立つ統計およびメトリックを含むレポートを生成します。
uncover は、Oracle Developer Studio コンパイラで構築された任意のバイナリで機能しますが、バイナリが最適化なしで構築されている場合に最適に機能します。–g を指定してバイナリをコンパイルすると、uncover はコードカバレージについてレポートする際にソースコードおよび行番号情報を表示できるようになります。
バイナリをコンパイルしたら、そのバイナリに対して uncover を実行します。uncover は、計測コードが追加された新しいバイナリを作成し、プログラムのコードカバレージデータが格納される binary.uc という名前のディレクトリも作成します。計測機構の組み込まれたバイナリを実行するたびに、コードカバレージデータが収集され、binary.uc ディレクトリに格納されます。
パフォーマンスアナライザで実験データを表示することも、uncover レポートを HTML として生成し、Web ブラウザで表示することもできます。
次の例は、コードカバレージを調べるための uncover レポートを生成する目的で、実行可能ファイルを準備し、計測機構を組み込み、実行する方法を示しています。最適化されたバイナリは test であり、計測機構が組み込まれた、やはり test という名前のバイナリに置換されます。
% cc -g -O2 test.c -o test % uncover test % test
実験ディレクトリは test.uc であり、計測機構の組み込まれた test の実行時に生成されるデータが含まれます。test.uc ディレクトリには、計測機構のない test バイナリのコピーも含まれます。
パフォーマンスアナライザで実験を表示するには:
% uncover test.uc
ブラウザの HTML ページで実験を表示するには:
% uncover -H test.html test.uc
詳細は、uncover(1) のマニュアルページとOracle Developer Studio 12.6: Discover および Uncover ユーザーズガイドを参照してください。
Oracle Developer Studio コードアナライザは、コードの統合分析を実行できるグラフィカルツールです。コードアナライザでは、ほかのツールで収集した 3 種類の情報を使用します。
Oracle Developer Studio の C または C++ コンパイラでアプリケーションをコンパイルし、–xprevise=yes オプションを指定した場合に実行される静的コード検査。
discover で –a オプションを使用してバイナリに計測機構を組み込んだあと、その計測機構が組み込まれたバイナリを実行した場合に実行される動的メモリーアクセス検査。
uncover でバイナリに計測機構を組み込んで、その計測機構が組み込まれたバイナリを実行したあと、収集されたカバレージデータに対して –a オプションを指定して Uncover を実行した場合に実行されるコードカバレージ検査。
これらのツールのいずれかまたは任意の組み合わせを使用して準備したバイナリに対して、コードアナライザを使用できます。ただし、3 種類のデータを統合して表示すると、コードを最も明確に調べることができ、よりセキュリティーと堅牢性の高いアプリケーションを作成できます。
次の例は、事前に discover および uncover で準備した a.out という名前のバイナリに対してコードアナライザを実行する方法を示しています。
% code-analyzer a.out
次の図では、a.out バイナリで検出された問題がコードアナライザに表示されています。
詳細は、コードアナライザの統合ヘルプ、Oracle Developer Studio 12.6: コードアナライザユーザーズガイド、およびOracle Developer Studio 12.6: コードアナライザチュートリアルを参照してください。
codean コマンド行ユーティリティーを使用して、コンパイラ、discover、および uncover によって収集されたデータからレポートを生成することもできます。codean ツールはコードアナライザと同様の機能を提供しますが、グラフィカル環境を利用できないシステムの場合、またはコマンド行を使用する場合に使用できます。codean ツールは自動化スクリプトでも使用でき、コードアナライザツールでまだ利用できないいくつかの機能があります。
詳細は、codean(1) のマニュアルページ、Oracle Developer Studio 12.6: コードアナライザユーザーズガイド、およびOracle Developer Studio 12.6: コードアナライザチュートリアルを参照してください。