Rational Purify がメモリ リークにジャンプできない
-
08-06-2019 - |
質問
そのため、私の会社では、Rational Purify というバグの多いプログラムを (Microsoft Visual Developer Studio のプラグインとして) 使用してメモリ リークを管理しています。このプログラムは、メモリ リークが発生したときにそれをクリックすると、リークが発生した行にジャンプできるように設計されています。
残念ながら、Purify は誤動作しており、Purify はリークが発生した場所にジャンプせず、リークが発生したクラスとメソッドについてのみ言及します。残念なことに、これは、クマ狩りを手伝ってくれるガイドを雇い、森を指差してそこにクマがいると教えてもらうのと同じくらい役立つこともあります。
Purify の経験のある人はこの問題を解決する方法を知っている人、または良いマニュアルを持っている人はいますか?
解決
通常、オプションは 2 つあり、1 つは Purify のインストルメンテーションからモジュール DLL を除外するもので、場合によっては役立ちます。2 番目は BoundsChecker の取得です。これにより、コンパイル時間の計測は大幅に遅くなりますが、詳細レベルは桁違いに向上します。
通常、チェックイン、健全性チェック時に Purify を使用し、バグやクラッシュが存在することがわかっている場合には BoundsChecker を使用します。
BoundsChecker には、計測ファイル A.cpp と B.cpp のみを除き、残りをすべて除外するなど、いくつかの優れた機能があります。
これら 2 つのアプリケーションはいずれも 64 ビット オペレーティング システムでは機能せず、BoundsChecker は 64 ビット OS にはインストールされないことに注意してください。32 ビット バック ポートを使用してネイティブ 64 ビット開発に切り替える場合、最もイライラします。
他のヒント
Purify はスイスナイフのようなものです。使い方を知っていれば、最高ではありませんが、ある程度の結果は得られるでしょう。そうしないと、これは Windows 上で実行される単なる別のプログラムであるため、クラッシュします。
最終的には、多くの忍耐と再構築、そして少しの運が必要になります。
Purify には、ScanVSSolutionForPurifyPlus.pl というスクリプトが付属しており、これによりプロジェクト ファイルに Purify が適切に動作するための適切な設定がすべて確実に含まれます。まだ実行していない場合は、試してみてください。
(私は個人的に大規模なソリューションで ScanVSSolutionForPurifyPlus.pl を使用しましたが、それは魅力的に機能しました。1 つの注意点:あなたの名前を付けるとき .sln
ファイルには、完全なパス名を指定する必要がある場合があります)。
デバッグ ビルドを行っていますか?それともすべての PDB が有効になっていますか?実行可能ファイルで WindDbg を試し、何が表示されるかを !lmi コマンドで確認してください。
コード全体が適切にインストルメント化されていますか?
次のような他のものを使用することも検討してください 無料の視覚的リークディテクタ または Microsoft のツール LeakDiag です。
5年くらい前にPurifyを使っていました。その時は本当に不安定でした。彼らは「次のリリース」ですべてのバグを修正すると約束し続けました。結局諦めました。彼らが自社の製品に独自の QA ツールを使用したのかどうか疑問に思うことしかできません。ああ、皮肉なことに...