在混合托管/非托管流程中转储CCW和RCW

时间:2020-03-06 14:39:56  来源:igfitidea点击:

我有一个混合的托管/非托管环境(Visual Studio和ReSharper),我怀疑CCW或者RCW泄漏。有什么方法可以转储所有当前分配的包装并标识其源/目标?我有WinDbg,SOS和SOSEx,因此可以使用!syncblk命令查看RCW和CCW的总数。我只想查看对象,因此可以对它们调用!gcroot,否则可以检查可疑对象。

解决方案

我们应该能够使用!dumpheap来做到这一点。 !dumpheap -stat将让我们找到类型名称(如果我们还不知道它们的话),然后!dumpheap -type {typename}将为我们提供可以传递给!gcroot的各个对象地址。 。