invalidGCHandleCookie MDA

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

症状

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

原因

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

解决方法

GCHandle 指定一个有效的 IntPtr cookie。

对运行时的影响

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

Output

会报告无效的 IntPtr cookie 值。

配置

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

请参见

参考

FromIntPtr

GCHandle

概念

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