質問

boundscheckerを使用して、かなり複雑なプログラムを分析しようとしています。 boundscheckerを使用してプログラムを実行すると、問題が発生すると思われるコード内のポイントまでプログラムを実行するのにほぼ1日かかるので、使用するにはほとんど遅すぎます。 Visual Studio 2005でboundschecker(DevPartner)を使用して、ソフトウェアの特定の部分のみを検査する方法について、アイデアを教えてもらえますか?

ご協力いただきありがとうございます!

役に立ちましたか?

解決

数年前に最後にBoundsCheckerを使用しましたが、同じ問題がありました。大規模なプロジェクトでは、すべての実行が非常に遅くなり、役に立たなくなります。私たちはそれを捨てました。

しかし、私たちはまだその機能の一部を必要としていましたが、プログラム全体ではなく、あなたのようなものです。だから私たちは自分でやらなければなりませんでした。

このケースでは、主にメモリリークの追跡に使用しました。それがあなたの目的でもある場合、他のオプションがあります。

  1. Visual Studioは、プログラムの終了時にメモリリークについて非常に優れた機能を提供します
  2. リークが作成された順に報告します
  3. ソースファイルの先頭にリークがある場合、リークメモリが作成された場所が正確に表示されます

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

これらは大いに役立ちますが、多くの場合十分ではありません。そのスニペットをどこにでも追加することは常に実行可能ではありません。ファクトリクラスを使用する場合、メモリが割り当てられた場所を知ることはまったく役に立ちません。したがって、他のすべてが失敗した場合、#2を利用します。

次のようなものを追加します。

#define LEAK(str) {char *s = (char*)malloc(100); strcpy(s, str);}

次に、<!> quot; LEAK(<!> quot; leak1 <!> quot;); <!> quot;を使用してコードを追加します。または何でも。プログラムを実行して終了します。リークした新しい文字列は、既存のリークを囲むVisual Studioのリークダンプに表示されます。 LEAKステートメントを追加/移動してプログラムを再実行し、正確な場所を特定するまで検索を絞り込みます。その後、リークを修正し、デバッグリークを削除すれば、準備は完了です!

他のヒント

BoundsCheckerは、すべてのメモリ割り当てとリリースを非常に詳細に追跡します。たとえば、このようなメモリ割り当てはCランタイムヒープから行われ、Win32ヒープから取得され、VirtualAllocによって割り当てられたメモリとして起動されることを知っています。アプリケーションがインストルメントされた場合(FinalCheck)、メモリを参照するポインターに関する詳細情報も含まれます。

これは、(多くの)物事が遅い理由の1つです。

BCが遅れてアプリケーションに接続する場合、このデータは構築されず、(1)一度にすべてを調べるか、(2)推測を開始します。どちらのソリューションも非常に実用的ではありません。

BoundsCheckerを軽量化する1つの方法は、興味のあるいくつかのモジュール以外のすべてをインストルメンテーションから除外することです。リークがどこにあるかを知っていればBoundsCheckerは必要ないので、それは素晴らしいことではありません。私が通常お勧めするのは、最初にBCのアクティブチェックモードを使用し、メモリトラッキングのみを使用することです。 API検証に失敗しますが、いつでも個別に再実行できます。 Active Checkを実行し、どのモジュールに問題がある傾向があるかについての手がかりを取得した後、そのモジュールまたは対象のモジュールとその依存関係のインスツルメンテーションを有効にします。ファイナルチェックは非常に遅くなりますが、Mistianoが正しく述べているように、ファイナルチェックではBCは割り当てられたすべてのブロックのグラフだけでなく、それらへのすべてのポインターとコンテキストも保持します。そこには、アプリケーションのシャットダウンや障害だけでなく、Final Checkが発生した時点でリークや破損を釘付けにする方法に魔法があります。恥知らずなプラグイン:私はDevPartnerチームで働いています。 2011年2月4日に、BCでx64アプリケーションをサポートするDPS 10.5をリリースします。 Active Checkのみを提供したItanium用の比較的古く売られていないBC64とは異なり、DPS 10.5は、x64アプリケーションに対して、純粋なC ++と.NETプロセスで実行されるネイティブモジュールの両方に対して完全な最終チェックをサポートします。詳細については、MF Developerのmicrofocus.comを参照してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top