invalidGCHandleCookie MDA

更新:2007 年 11 月

试图从无效的 IntPtr cookie 转换为 GCHandle 时,将激活 invalidGCHandleCookie 托管调试助手 (MDA)。

症状

试图使用 GCHandle 或从 IntPtr 中检索 GCHandle 时发生未定义的行为,如访问冲突和内存损坏。

原因

该 cookie 可能因为它最初不是从 GCHandle 创建的而无效,可能表示一个已释放的 GCHandle,可能是另一个应用程序域中的 GCHandle 的一个 cookie,也可能是作为一个 GCHandle 被封送到本机代码但却作为一个 IntPtr 传回了 CLR 中(此时发生了强制转换)。

解决办法

GCHandle 指定一个有效的 IntPtr cookie。

对运行库的影响

启用此 MDA 时,调试器再也无法跟踪返回其对象的根,因为传递回的 cookie 值与未启用此 MDA 时返回的值不同。

输出

会报告无效的 IntPtr cookie 值。

配置

<mdaConfig>
  <assistants>
    <invalidGCHandleCookie />
  </assistants>
</mdaConfig>

请参见

概念

使用托管调试助手诊断错误

参考

FromIntPtr

GCHandle