Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
调试Windows组件对象模型(COM)中的内存泄漏 我们有一个本地的C++应用程序,它运行在Windows上,它使用组件对象模型(COM)作为客户端。在我们的例子中,我们可以使用IUIAutomation。不幸的是,我们的代码中存在内存泄漏,这些泄漏并没有使用我们的基本内存调试方法显示出来:_Windows_Visual Studio_Visual Studio 2012_Memory Leaks_Com - Fatal编程技术网

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

调试Windows组件对象模型(COM)中的内存泄漏 我们有一个本地的C++应用程序,它运行在Windows上,它使用组件对象模型(COM)作为客户端。在我们的例子中,我们可以使用IUIAutomation。不幸的是,我们的代码中存在内存泄漏,这些泄漏并没有使用我们的基本内存调试方法显示出来:,windows,visual-studio,visual-studio-2012,memory-leaks,com,Windows,Visual Studio,Visual Studio 2012,Memory Leaks,Com,\u CRTDBG\u MAP\u ALLOC- 我们如何调试与滥用COM/IUnknown/和跨越COM屏障的内存分配相关的可执行文件中的内存泄漏 我们在工具/库等方面很灵活。我们在运行Visual Studio 2012的Windows 8上。这可能与此有关 基本上,OLE缓存在一个进程中分配的所有BSTR对象,以允许它将字符串汇集在一起。因此,这些字符串实际上是“故意”泄漏的。KB文章指出,当OLEAUT32.DLL的DLL_进程_分离逻辑运行时,缓存被清除,这很好,但没有帮助我调试我的B

\u CRTDBG\u MAP\u ALLOC
-

我们如何调试与滥用COM/IUnknown/和跨越COM屏障的内存分配相关的可执行文件中的内存泄漏


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

这可能与此有关

基本上,OLE缓存在一个进程中分配的所有BSTR对象,以允许它将字符串汇集在一起。因此,这些字符串实际上是“故意”泄漏的。KB文章指出,当OLEAUT32.DLL的DLL_进程_分离逻辑运行时,缓存被清除,这很好,但没有帮助我调试我的BSTR泄漏-我可能仍然在泄漏BSTR


好的方面是,您可以通过设置环境变量
OANOCACHE=1
并重新启动。或者,您可以在不影响整个操作系统的情况下在程序内调用。

时间对工具供应商来说并不友好。然而,这些泄漏应该在标准工具中显示。
\u CRTDBG\u MAP\u ALLOC
将只检测堆上的泄漏,而不会检测COM服务器堆上的泄漏,除非您可以重新编译后者。iAllocpy似乎也是一种可能性。我发现这非常有用: