我如何可靠地测试(在IL中或.NET提供的某些方法)给定的native int
是否是有效的对象引用(O
)?指针可能已从某个调试器中检索到,并且可能无效(或在返回后收集)。简单地将其作为对象返回会在无效地址上抛出无法捕获的ExecutionEngineException
。我尝试castclass
到object
,如果有一些无效的引用,它会抛出NullPointerException
,但它也会抛出一些带有某些地址的错误AccessViolationException
。有没有更好的方法来做到这一点,不会抛出任何无法捕获的异常或破坏内存?
答案 0 :(得分:0)
在对该问题的评论中,您说该指针来自探查器API,因此我假设您的调试器是使用探查器API实现的。
没有可靠的方法来检查指向对象(ObjectID)的指针是否有效。即使它指向看似有效的对象,也可能不是相同的对象。相反,通常的方法是track the object通过GC回调并根据需要更新/丢弃您的引用。
如果将指针存储在未更新且允许GC运行的地方,则应自动假设指针无效。