0

これはプログラミングの質問のようには見えないかもしれませんが、本質的にコードを扱います。

次のテストコードがあります。これには、配列インデックスの範囲外、メモリリークなどの明らかなエラーがあります。-

#include "stdio.h"
#include "stdlib.h"
main()
{
   int i;
   char *ptr;
   ptr = (char*)malloc(5);
   for(i=0;i<10;i++)
   {
      ptr[i]=(char)i;
   }

}

このコードは、MS-VisualStudio2008に基づいて作成されています。

Rational Purify(バージョン7.0)を使用して、コードの実行時エラーやメモリリークを特定しようとしています。Purifyで使用するコードを作成する方法に関するいくつかの指針を読んだ後、MSVS-2008プロジェクト設定で以下のことを行いました。-

1.)インクリメンタルリンクを無効にします2.)デバッグ情報コンパイラフラグは/ Zi

3.)リンカーオプションを設定します-「基本的なランタイムチェックをデフォルト値に設定します。

4.)追加のリンカーオプション/ fixed:noを追加しました。

5.)ビルド構成はデバッグであり、最適化は有効になっていません。

次に、exeをビルドして取得します。このexeを使用してPurifyで実行し、同じようにインストルメントします。しかし、このexeを実行/計測した後のpurifyの出力ウィンドウには、上記のコードに存在するメモリリークなどに関するエラーは表示されません。

浄化出力ウィンドウには、インストルメントされてロード、実行されたさまざまなバイナリ(私のexeファイルと他のいくつかのシステムdll)の出力が表示されます。しかし、が私のexeに関するデータを示している出力には、エラーメッセージはありません。

MS-VS 2008でexeをビルドしているときに、コンパイル/リンカーオプションを指定するのを間違えていると感じています。または、生成された実行可能形式がPurifyと互換性がない/理解できないのですか?

1.)ここで何が間違っている可能性がありますか?exeファイルの作成中に必要になる可能性のあるオプションは他にありますか?

2.)Purifyを使用するプロセスは正しいですか、それとも何かが足りませんか?実行時分析を行った後、Purifyにプログラムのすべてのエラーを表示させるにはどうすればよいですか?

3.)Cコードの実行時分析を行うことにより、メモリリーク、範囲外の配列エラー、初期化されていないポインタの使用、変数、メモリ破損などを検出できる他のツール(無料/商用ライセンス)はありますか?

長いメールで申し訳ありませんが、明確にする必要がありました。

ありがとう。

-広告

4

1 に答える 1

1

インターネットで読んで、猛烈に多くのことを試した後、私はその解決策を見つけました。このため

1)新しい環境変数を次のように追加します。

名前=IBM_RATIONAL_PURIFY_ENABLE_SELECTIVE

ベール=1

2)OPで述べたMS Visual Studioプロジェクトの設定とは別に、以下の設定が必要です-

C /C++->コード生成=ランタイムライブラリ->マルチスレッドデバッグ/MTd

そして、実行可能ファイルをpurifyで実行するときは、[選択の構成]をクリックして、exeを選択する必要があります。

次に、実行すると、必要なエラー関連情報が収集されます。

-広告

于 2010-02-23T17:49:15.610 に答える