测试给定的对象引用是否有效

Test if a given object reference is valid

如何可靠地测试(在 IL 中或使用 .NET 提供的某些方法)给定的 native int 是否是有效的对象引用 (O)?该指针可能已从某些调试器中检索到,并且可能无效(或在返回后被收集)。简单地将其作为对象返回会在无效地址上抛出无法捕获的 ExecutionEngineException。我试过从 castclassobject,这会在某些无效引用的情况下抛出 NullPointerException,但它也会对某些地址抛出错误的 AccessViolationException。有没有更好的方法来做到这一点,而不会抛出任何无法捕获的异常或破坏内存?

在对该问题的评论中,您说指针来自分析器 API,因此我假设您的调试器是使用分析器 API 实现的。

没有可靠的方法来检查指向对象 (ObjectID) 的指针是否有效。即使它指向看似有效的对象,它也可能不是 相同的 对象。相反,正常的方法是 track the object 通过 GC 回调和 update/discard 适当的引用。

如果您将指针存储在未更新的位置并且允许 GC 运行,那么您应该自动假定该指针无效。