1

私はひどい MSXML 構文解析コードを受け継いでいます (悲しいことに、書き直す時間がありません)。このコードは、元の作成者が手動の COM 参照カウントを誤用したか (常に涙で終わるようです)、COM スマート ポインターを使用していたが間違って使用したため、リークが発生した COM インターフェイス/BSTR リークでいっぱいです。

コード内のリークの多くを修正しましたが、CoUninitialize() を呼び出したときに msxml3.dll がアンロードされず (すべてのインターフェイスがなくなった場合はアンロードされるはずです)、より多くのメモリが使用されていることがわかりました。このコードが実行された後の予想よりも。

現在、手作業で発見できる限界に達しており、この種のリークを特定できるデバッグ ソリューションを探しています。私は過去に umdh を使用して、従来のリークを見つけるのに効果的でしたが、これは COM リークにはあまり役に立たないようです。誰でも良いアプローチを推奨できますか?

4

1 に答える 1

1

BoundsChecker (Micro Focus 製品) を試してください。「COM オブジェクト トラッキング」機能を有効にすると、COM インターフェイス リークが表示されます。X86 と X64 の両方のアプリケーションで動作します。とは言っても、あなたのマイレージは異なるかもしれません.私は今そのコードをきれいにすることに取り組んでいます. この特定のコードは、何年も触れられていません。

SysAlloc リークに関しては、IMalloc クラスが解放されたメモリを実際に解放するのではなくキャッシュする方法があるため、これは難しい領域です。時間と中断が許す限り、私はまだその領域に取り組んでいます。

開示(まだ明らかでない場合):私はMicro Focusで働いており、特にBoundsCheckerに取り組んでいます。

于 2012-10-19T12:43:01.413 に答える