【发布时间】:2012-10-19 20:43:01
【问题描述】:
我继承了一些糟糕的 MSXML 解析代码(遗憾的是我没有时间重写)。这段代码充满了 COM 接口/BSTR 泄漏,原作者要么误用了手动 COM 引用计数(这似乎总是以泪水告终),要么他们使用了 COM 智能指针但错误地使用它们导致发生泄漏。
我现在已经修复了代码中的许多漏洞,但我仍然发现当我调用 CoUninitialize() 时 msxml3.dll 没有被卸载(如果所有接口都已消失,则应该是这样)和更多内存这段代码运行后的使用量超出了我的预期。
我现在已经达到了我可以手动发现的极限,我正在四处寻找可以识别此类泄漏的调试解决方案。我过去使用 umdh 发现常规泄漏效果很好,但这似乎对 COM 泄漏没有太大帮助。谁能推荐一个好的方法?
【问题讨论】:
-
您是否尝试将流程附加到 AppVerifier ?该工具显示每个泄漏的堆栈跟踪。 (您需要有适当的符号才能查看堆栈跟踪)
-
应用验证程序是否仍然这样做?我确定那里使用了一些 COM 选项,但我在 SDK 7.0 的版本中看不到它们
-
我有版本 6.2 并且看到
Leaks是Basic测试的一部分。 -
msdn.microsoft.com/en-us/library/sycfy8ec%28v=vs.80%29.aspx 可能会有所帮助,但我认为它不会解决您的所有问题。
-
@Mahesh - 啊,是的,我试过这个,它类似于 umdh,它似乎没有发现 COM 泄漏只有正常泄漏。程序在 appverifier 开启时运行良好。