调试Windows组件对象模型(COM)中的内存泄漏

时间:2013-08-21 01:08:21

标签: windows visual-studio visual-studio-2012 memory-leaks com

我们在Windows上运行一个本机C ++应用程序,它使用组件对象模型(COM)作为客户端。在我们的例子中,我们可以使用IUIAutomation。不幸的是,我们的代码中存在内存泄漏,而这些内存泄漏并未使用我们的基本内存调试方法显示:

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

我们如何调试可执行文件中的内存泄漏,这些泄漏与我们在COM屏障中滥用COM / IUnknown /和内存分配有关?

我们在工具/库/等方面很灵活。我们在Windows 8上运行Visual Studio 2012。

1 个答案:

答案 0 :(得分:0)

这可能与BSTR caching有关。

  

基本上,OLE缓存进程中分配的所有BSTR对象,以允许它将字符串汇集在一起​​。结果,这些字符串“故意”有效地泄露。 KB文章指出在运行OLEAUT32.DLL的DLL_PROCESS_DETACH逻辑时清除了缓存,这很有用,但是没有帮助我调试我的BSTR泄漏 - 我仍然可能泄漏BSTR。

好处是您可以disable this caching设置环境变量OANOCACHE=1并重新启动。或者,您可以在程序中调用SetOaNoCache,而不会影响整个操作系统。