1

我继承了一些糟糕的 MSXML 解析代码(遗憾的是我没有时间重写)。这段代码充满了 COM 接口/BSTR 泄漏,原作者要么误用了手动 COM 引用计数(这似乎总是以泪水告终),要么他们使用了 COM 智能指针但错误地使用了它们,从而发生了泄漏。

我现在已经修复了代码中的许多泄漏,但我仍然发现当我调用 CoUninitialize() 时 msxml3.dll 没有被卸载(如果所有接口都已经消失,它应该是这样)并且正在使用更多内存比我预期的这段代码运行后。

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

4

1 回答 1

1

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

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

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

于 2012-10-19T12:43:01.413 回答