我们在Windows上运行一个本机C ++应用程序,它使用组件对象模型(COM)作为客户端。在我们的例子中,我们可以使用IUIAutomation
。不幸的是,我们的代码中存在内存泄漏,而这些内存泄漏并未使用我们的基本内存调试方法显示:
_CRTDBG_MAP_ALLOC
- http://msdn.microsoft.com/en-us/library/x98tx3cf.aspx
我们如何调试可执行文件中的内存泄漏,这些泄漏与我们在COM屏障中滥用COM / IUnknown /和内存分配有关?
我们在工具/库/等方面很灵活。我们在Windows 8上运行Visual Studio 2012。
答案 0 :(得分:0)
这可能与BSTR caching有关。
基本上,OLE缓存进程中分配的所有BSTR对象,以允许它将字符串汇集在一起。结果,这些字符串“故意”有效地泄露。 KB文章指出在运行OLEAUT32.DLL的DLL_PROCESS_DETACH逻辑时清除了缓存,这很有用,但是没有帮助我调试我的BSTR泄漏 - 我仍然可能泄漏BSTR。
好处是您可以disable this caching设置环境变量OANOCACHE=1
并重新启动。或者,您可以在程序中调用SetOaNoCache,而不会影响整个操作系统。