3

コンポーネント オブジェクト モデル (COM) をクライアントとして使用する Windows で実行されているネイティブ C++ アプリケーションがあります。この場合、 を使用できIUIAutomationます。残念ながら、コードにメモリ リークがあり、基本的なメモリ デバッグ アプローチを使用しても表示されません。

_CRTDBG_MAP_ALLOC- http://msdn.microsoft.com/en-us/library/x98tx3cf.aspx

COM/IUnknown/および COM バリアを越えたメモリ割り当ての誤用に関連する実行可能ファイルのメモリ リークをデバッグするにはどうすればよいでしょうか?

ツール/ライブラリ/などに柔軟に対応します。Visual Studio 2012 を実行している Windows 8 を使用しています。

4

1 に答える 1

1

BSTR キャッシングと関係がある可能性があります。

基本的に、OLE は、プロセスに割り当てられたすべての BSTR オブジェクトをキャッシュして、文字列を一緒にプールできるようにします。その結果、これらの文字列は「意図的に」効果的にリークされます。KB 記事は、OLEAUT32.DLL の DLL_PROCESS_DETACH ロジックが実行されるとキャッシュがクリアされることを示しています。これは知っておくとよいことですが、BSTR リークをデバッグするのには役立ちませんでした。BSTR が引き続きリークしている可能性があります。

良いことは、環境変数を設定して再起動することで、このキャッシュを無効にできることです。または、オペレーティング システム全体に影響を与えることなく、プログラム内でSetOaNoCacheOANOCACHE=1を呼び出すことができます。

于 2016-05-20T07:31:33.523 に答える