跟踪COM接口/ SysAlloc泄漏

时间:2012-08-17 17:38:12

标签: c++ com msxml

我继承了一些可怕的MSXML解析代码(遗憾的是我没有时间重写)。这段代码充满了COM接口/ BSTR泄漏,其中原作者滥用手动COM引用计数(似乎总是在流泪中结束)或者他们使用了COM智能指针但是错误地使用它们以至于发生了泄漏。 / p>

我现在修复了代码中的许多漏洞,但是我仍然发现当我调用CoUninitialize()时它没有被卸载(如果所有接口都已经消失,那么它应该被释放)和更多的内存在此代码运行后,我的使用率超出预期。

我现在已经达到了我可以手工发现的极限,我正在寻找可以识别这些泄漏的调试解决方案。我过去使用umdh效果很好,可以发现传统的泄漏,但这似乎对COM漏洞没什么帮助。任何人都可以推荐一个好的方法吗?

1 个答案:

答案 0 :(得分:1)

尝试BoundsChecker(Micro Focus产品)。如果激活“COM对象跟踪”功能,它将显示COM接口泄漏。它适用于X86和X64应用程序。也就是说,你的里程可能会有所不同:我正在努力清理这段代码(这是通过谷歌引导我提问的原因),我们的下一个版本应该更好。这个特殊的代码多年来没有被触及过。

关于SysAlloc泄漏,这是一个困难的领域,因为IMalloc类缓存释放的内存,而不是真正释放它。由于时间和中断许可,我仍然在该领域工作。

披露(如果已经不明显):我为Micro Focus工作,特别是在BoundsChecker工作。