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

时间:2015-06-14 21:45:51

标签: .net clr cil il

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

1 个答案:

答案 0 :(得分:0)

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

没有可靠的方法来检查指向对象(ObjectID)的指针是否有效。即使它指向看似有效的对象,也可能不是相同的对象。相反,通常的方法是track the object通过GC回调并根据需要更新/丢弃您的引用。

如果将指针存储在未更新且允许GC运行的地方,则应自动假设指针无效。