Как я могу достоверно проверить (в IL или с некоторыми методами, предоставленными .NET), является ли заданный native int
действительной ссылкой на объект (O
)? Указатель мог быть извлечен из некоторого отладчика, и он может быть недействительным (или собран после его возврата). Просто возвращая его как объект, выдает неуправляемый ExecutionEngineException
по неверным адресам. Я пробовал castclass
до object
, который бросает NullPointerException
в случае некорректных ссылок, но также вызывает плохое AccessViolationException
с некоторыми адресами. Есть ли лучший способ сделать это, не бросая какие-либо неуловимые исключения или разлагая память?Тестирование, если ссылка на данный объект действительна
0
A
ответ
0
В комментарии к вопросу вы сказали, что указатель поступает из API-интерфейса профилировщика, поэтому я предполагаю, что ваш отладчик реализован с использованием API-интерфейса профилировщика.
Нет надежного способа проверить, является ли указатель на объект (ObjectID) действительным. Даже если это указывает на то, что кажется действительным объектом, это может быть не тот же объект. Вместо этого обычный подход заключается в track the object через обратные вызовы GC и обновляет/отменяет ваши ссылки в зависимости от ситуации.
Если вы храните указатель где-то, что не обновляется, и GC разрешен для запуска, то вы должны автоматически предположить, что указатель недействителен.
Смежные вопросы
- 1. Как проверить, действительна ли ссылка на объект?
- 2. Почему ссылка на временный объект действительна здесь?
- 3. Тестирование, если ссылки на объект Cocoa действительны?
- 4. Ссылка на AnyCpu x64 действительна?
- 5. iphone - тестирование, если существует объект
- 6. Ссылка не действительна
- 7. тестирование, если ссылка является ссылкой на YouTube.
- 8. Программно проверить, действительна ли ссылка на YouTube?
- 9. Тестирование, если объект был освобожден
- 10. Проверить изображение Ссылка действительна или сломанный
- 11. тестирование, если объект реализует протокол
- 12. Тестирование, если объект является строкой
- 13. Могу ли я определить, действительна ли ссылка на действие?
- 14. диаграмма классов - ссылка действительна или нет?
- 15. Тестирование, если объект не удален
- 16. Ссылка на нулевой объект, если изменения конфигурации
- 17. ссылка не действительна Создание гиперссылки VBA
- 18. Ссылка на объект Ссылка на экземпляр объекта
- 19. тестирование, если что-то есть ссылка на что-то другое
- 20. тестирование, если ссылка направляется на правильную страницу в django
- 21. Ссылка не действительна ошибка в первенствовать гиперссылкой
- 22. Проверка Javascript, если страница действительна
- 23. Ссылка на объект точно
- 24. Ссылка на объект
- 25. ссылка на объект
- 26. Ссылка на родительский объект
- 27. Ссылка на объект?
- 28. ссылка на объект
- 29. Утверждение, если строка действительна int
- 30. Ссылка на заостренный объект
Вы можете перечислить все объекты кучи, используя API-интерфейс профилировщика, и посмотреть, находится ли этот указатель в наборе всех объектов. Вы также должны были бы заморозить всю цепочку при этом, чтобы не было объектов, движущихся по GC. Вам действительно нужно пересечь кучу, чтобы проверить указатель, потому что указываемые данные могут быть серединой байта [], который просто выглядит как объект. – usr
@usr По иронии судьбы, указатель фактически исходит из API-интерфейса профилировщика (или аналогичного). Большинство возвращаемых им объектов работают, но некоторые из них бросают EEE. – IllidanS4
Я вижу проблемы с сборкой мусора впереди, когда объекты перемещаются, но ваше бедное целое остается. – sisve