如何从托管代码调试未发布的COM引用?

时间:2010-03-08 08:50:12

标签: c# .net debugging com clr

我一直在寻找一种工具来调试未发布的COM引用,这通常会导致例如如果代码未正确调用所有COM实例上的Marshal.ReleaseCOMObject,则Word / Outlook会在内存中挂起。 (Outlook 2007部分修复了outlook addins,但这是一个通用问题。)

是否有一个工具至少会显示托管代码所持有的COM引用列表(按类型)?理想情况下,它还会显示内存分析器样式的对象树,有助于调试参考增量发生。

在运行时调试并不重要,因为能够连接到挂起的进程 - 因为问题通常发生在代码完成COM接口而有人忘记发布某些内容时 - 应用程序(例如winword)挂起在内存中甚至在调用托管应用程序退出之后。

如果这样的工具不存在,那么(技术?)原因是什么?在使用COM互操作时调试很多非常难以发现的问题非常有用。

2 个答案:

答案 0 :(得分:0)

您正在寻找的答案(或简单),但ReleaseCOMObject(与其包装的本机版本一样)返回一个Integer,它应指示剩余的未完成引用的数量。您可以向项目中添加代码以显式执行AddRef,然后您可以释放,查看新计数,并查看它是否符合您的预期等。

答案 1 :(得分:0)

以下是使用调试器

调试COM引用的答案

Troubleshooting a COM+ application deadlock

相关问题